Python Code Notes

Information by python engineer

【sqlite3】データベースを作成する方法【python】

f:id:vigilantPotato:20210704082302p:plain
Pythonでは、組込みモジュールであるsqlite3を用いてデータベースを利用することができる。以下、sqlite3を用いてデータベースファイルを作成し、テーブルのフィールド・レコードを作成する方法及びデータを読み出す方法を整理する。


【スポンサーリンク】


データベースの概要

データベース内では、フィールド(列)とレコード(行)から構成されるテーブル(表)を用いてデータを保存している。サンプルデータベースとして、以下の様なフルーツのid、名前、価格の一覧を管理するためのデータベースを作成していく。この例では、id, name, priceがフィールド、各データがレコードになる。

テーブル名:Fruit

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

[↑ 目次へ]

データベースファイルを作成・フィールドを登録

データベースを作成し、フィールドを登録する例を示す。

import sqlite3

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

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

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

connectメソッドを用いてファイル名を指定することで、データベースファイル操作用オブジェクトを作成できる。ファイルが存在しない場合は新規作成される。次に、SQLコマンドのCREATE TABLE テーブル名(フィールド)を設定しexecuteメソッドを実行することで、データベース内にテーブルを作成し、最後にデータベースを閉じている。

[↑ 目次へ]


【スポンサーリンク】


レコードを登録

次に、作成したデータベースファイル内のテーブルに、レコードを登録していく例を示す。

import sqlite3

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

#レコード登録用SQL文
sql = """
    INSERT INTO Fruit VALUES (
        1,
        'banana',
        130
    )
"""

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

レコードを登録する際は、SQLコマンドのINSERT INTO テーブル名 VALUES(レコード情報)を使用する。上記の例では、SQLコマンドのレコード情報に、一つ目の要素である(1, banana, 130)を設定し、executeメソッドで実行することでレコードを登録している。

[↑ 目次へ]

複数のレコードを一括登録

複数のレコードを一括で登録する場合は、executemanyメソッドを使用する。

import sqlite3

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

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

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

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

リストにした登録データをexecutemanyメソッドに渡すことで、データを一括登録している。この時、SQL文のデータ項目は?にしておく。

[↑ 目次へ]


【スポンサーリンク】


データ読み出し

データを読み出す時は、データベースからcursorオブジェクトを作成し、レコード取得用SQLコマンドを実行する。

import sqlite3

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

#データベースからcursorオブジェクトを作成
c = db.cursor()

#レコード取得SQL文
sql = """SELECT * FROM Fruit""" #Fruitテーブル内のすべての項目を選択

#cursorオブジェクトでSQL文を実行
c.execute(sql)

#選択した項目を表示
for item in c:
    print(item)

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

データベース内の全てのレコード取得には、SQLコマンドのSELECT フィールド名 FROM テーブル名を使用する。今回は全てのフィールドを取得しているので、フィールド名を*にしている。

[↑ 目次へ]


【スポンサーリンク】