
sqlite3でデータベースに作成したテーブルについて、フィールド(カラム)を取得、追加する方法をまとめました。
フィールド名を取得・追加する
データベース中のテーブルのフィールド名を取得する方法と、フィールドを追加する方法をまとめました。
事前にsqlite3のインポートと、データベースfruit.dbを作成しておきます。その後、Fruitテーブルを作成してテーブル内に、id、name、priceフィールドを作成しておきます。
import sqlite3 #データベースを作成 db = sqlite3.connect("fruit.db", isolation_level=None) #テーブルを作成 #SQL命令文 sql = """ CREATE TABLE IF NOT EXISTS Fruit ( id INTEGER PRIMARY KEY, name VARCHAR(20), price INTEGER ); """ #命令を実行 db.execute(sql)
フィールド名を取得
テーブルのフィールド名を取得するには、カーソルオブジェクトでSELECTコマンドを実行してテーブル内の情報を取得した後、description属性を取得します。
#SQL命令文(Fruitテーブル内情報を取得) sql = "SELECT * FROM Fruit" #カーソルオブジェクトを作成 c = db.cursor() #命令を実行 c.execute(sql) #フィールド名を取得 print(c.description)
出力:
(('id', None, None, None, None, None, None), ('name', None, None, None, None, None, None), ('price', None, None, None, None, None, None), ('quantity', None, None, None, None, None, None))
description属性を取得すると、今回の例では7要素を持つタプルが3つ出力されます。それぞれのタプルの先頭の要素がテーブルに登録されたフィールド名で、そのほかはNoneとなります。
そのため、実際にフィールド名を取得する際は、以下の様にfor文を用いた方がわかりやすいです。
for d in c.description: print(d[0])
出力:
id name price
フィールドを追加
テーブルにフィールドを追加するSQL命令文は以下の通りです。
ALTER TABLE テーブル名 ADD COLUMN 追加するフィールド名 型
Fruitテーブルにquantityフィールドをinteger型で追加する場合は、以下の通りになります。
#SQL命令文(Fruitテーブルにフィールド「quantity」を追加) sql = """ALTER TABLE Fruit ADD COLUMN quantity INTEGER""" #命令を実行 db.execute(sql)
コード全体
import sqlite3 #データベースを作成 db = sqlite3.connect("fruit.db", isolation_level=None) #テーブルを作成 #SQL命令文 sql = """ CREATE TABLE IF NOT EXISTS Fruit ( id INTEGER PRIMARY KEY, name VARCHAR(20), price INTEGER ); """ #命令を実行 db.execute(sql) #①フィールド名を取得して表示する def get_field_name(): #SQL命令文(Fruitテーブル内のレコードを全て取得) sql = "SELECT * FROM Fruit" #カーソルオブジェクトを作成 c = db.cursor() #命令を実行 c.execute(sql) #フィールド名を取得 for d in c.description: print(d[0]) #②テーブルにフィールドを追加する #SQL命令文(Fruitテーブルにフィールド「quantity」を追加) sql = """ALTER TABLE Fruit ADD COLUMN quantity INTEGER""" #命令を実行 db.execute(sql) #フィールド名を表示 print("フィールドquantity追加後") get_field_name() #データベースを閉じる db.close()