田舎社会人のいろいろ学習記

Python、英語、その他いろいろ

【sqlite3】フィールド(カラム)を取得・追加する方法【python】

f:id:vigilantPotato:20210704082302p:plain
Pythonの組込みモジュールであるsqlite3を用いてデータベースファイルのフィールド(カラム)を取得、追加する方法を整理する。 データベースの基本的な作成方法は、以下の記事を参照。


【スポンサーリンク】


データベースの準備

まず、以下のコードを実行してサンプルデータベースを作成する。

import sqlite3

#データベース読み込み
db = sqlite3.connect(
    "text.db",              #ファイル名
    isolation_level=None,
)

#フィールド作成用SQL文
sql = """
    CREATE TABLE Fruit (
        id INTEGER PRIMARY KEY,
        name VARCHAR(20),
        price INTEGER
    );
"""

db.execute(sql) #sql文を実行

#登録データ
r = [(1, "banana", 130), (2, "apple", 100), (3, "orange", 198)]

#レコード一括登録登録用SQL文
sql = """
    INSERT INTO Fruit VALUES (
        ?, ?, ?
    )
"""

db.executemany(sql, r)  #sql文を実行
db.close()              #データベースを閉じる

作成されるデータベースは以下の通り。

テーブル名:Fruit

id name price
1 banana 130
2 apple 100
3 orange 198

[↑ 目次へ]


フィールド(カラム)名を取得

カーソルオブジェクトで以下のSQLコマンドを実行した後、descriptionメソッドを使用すると、データベース内に存在しているフィールド名を取得することができる。

SELECT * FROM Fruit

以下、データベース内のフィールド名を取得して表示する例を示す。

import sqlite3

#データベース読み込み
db = sqlite3.connect(
    "test.db",              #ファイル名
    isolation_level=None,
)

sql = "SELECT * FROM Fruit"

#カーソルオブジェクトを作成
c = db.cursor()

#命令を実行
c.execute(sql)

#フィールド名を取得
print(c.description)

db.close()      #データベースを閉じる

出力される結果は以下の通り。7要素を持つタプルが3つ出力され、タプルの先頭の要素がフィールド名となる。

(('id', None, None, None, None, None, None), ('name', None, None, None, None, None, None), ('price', None, None, None, None, None, None))

フィールド名のみを取得する場合は以下の通り。

for d in c.description:
    print(d[0])

[↑ 目次へ]


【スポンサーリンク】


フィールドを追加

SQLコマンドALTER TABLE テーブル名 ADD COLUMN 追加するフィールド名 型を実行すると、フィールドを追加することができる。以下、サンプルデータベースにquantityフィールドをinteger型で追加する例を示す。

import sqlite3

#データベース読み込み
db = sqlite3.connect(
    "test.db",              #ファイル名
    isolation_level=None,
)

#SQL文(Fruitテーブルにフィールド「quantity」を追加)
sql = """ALTER TABLE Fruit ADD COLUMN quantity INTEGER"""

db.execute(sql) #命令を実行
db.close()      #データベースを閉じる

[↑ 目次へ]


【スポンサーリンク】