Python SQLite3モジュール#

SQLiteは、軽量なデータベースエンジンであり、Pythonの標準ライブラリに含まれています。Pythonでは、sqlite3モジュールを使用してSQLiteデータベースを操作できます。

Pythonを使用する経験がない場合は,以下の手順でColabを使用してSQLiteデータベースを操作できます。

  1. Googleアカウントにログインします。

  2. Google Colabにアクセスします。

  3. 「+ New notebook」をクリックして新しいノートブックを作成します。

  4. ソースコードをセルにコピー&ペーストします。

  5. 実行ボタンまたはShift + Enterキーを押してセルを実行します。

  6. 必要に応じて、「+ Code」をクリックして新しいセルを追加できます。

Cursor#

データベースの作成#

import sqlite3を使用してSQLiteモジュールをインポートします.

sqlite3.connect() を呼び出して、SQLiteデータベースを作成します。以下のコードは、example.dbというデータベースに接続します。データベースが存在しない場合は、新しく作成されます。

import sqlite3
con = sqlite3.connect('example.db')

cursorの作成#

SQL文を実行し,結果を取得するために、cursorを作成します。

cur = con.cursor()

テーブルの作成#

execute()メソッドを使用して、SQL文を実行します。

以下の例では、studentsというテーブルを作成します.

cur.execute('''
CREATE TABLE students (
    id TEXT PRIMARY KEY,
    name TEXT NOT NULL,
    age INTEGER NOT NULL
)''')

作成したテーブルを確認するために、sqlite_masterテーブルをクエリします。

res = cur.execute("SELECT name FROM sqlite_master")
res.fetchone()

('students',)のような結果が返されれば、テーブルが正しく作成されています。

データの追加#

execute()メソッドを使用して、データをテーブルに追加します。

以下の例では、studentsテーブルに3人の学生のデータを挿入します。

cur.execute('''
INSERT INTO students (id, name, age) VALUES
('s001', 'Alice', 20),
('s002', 'Bob', 22),
('s003', 'Charlie', 21)
''')

con.commit()を呼び出して、変更をデータベースに保存します。

con.commit()
res = cur.execute("SELECT * FROM students")
res.fetchall()

[('s001', 'Alice', 20), ('s002', 'Bob', 22), ('s003', 'Charlie', 21)]のような結果が返されれば、データが正しく追加されています。

この結果には,一つのlistに複数のtupleが含まれています。各tupleは、テーブルの各行を表しています。

listからのデータの追加#

以下の例では、pythonのlistからデータを追加します。

data = [
    ('s004', 'David', 23),
    ('s005', 'Eve', 19)
]
cur.executemany('''
INSERT INTO students (id, name, age) VALUES (?, ?, ?)''', data)
con.commit()

?はplaceholderで、executemany()メソッドはdataリストの各要素を順番に置き換えます。

res = cur.execute("SELECT * FROM students")
res.fetchall()

cur.execute()の結果をiterateすることで、各行を個別に処理することもできます。

for row in cur.execute("SELECT name, age FROM students ORDER BY age"):
    print(row)

close()メソッド#

データベースの操作が完了したら、close()メソッドを使用して、cursorとデータベース接続を閉じます。

cur.close()
con.close()

データベースに接続する#

作成したデータベースに再度接続するには、同じようにsqlite3.connect()を使用します。

new_con = sqlite3.connect('example.db')
new_cur = new_con.cursor()

res = new_cur.execute("SELECT * FROM students ORDER BY age DESC")
student_id, name, age = res.fetchone()
print(f'The oldest student is {name} with age {age}.')

new_cur.close()
new_con.close()

pandas#

import pandas as pd
import sqlite3

# sample data
df = pd.DataFrame({
    'id': ['s001', 's002', 's003'],
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [20, 22, 21]
})

# write to SQLite database
con = sqlite3.connect('pd_example.db')
df.to_sql('students', con, if_exists='replace', index=False)

# read from SQLite database
df_read = pd.read_sql_query('SELECT * FROM students', con)
print(df_read)

# another query
df_read = pd.read_sql_query('SELECT name, age FROM students WHERE age > 20', con)
print(df_read)

# close connection
con.close()

pandas.DataFrame.to_sql()#

DataFrameをSQLiteデータベースに書き込む.

pandas.DataFrame.to_sql(name, con, schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None, method=None)

"""
parameters
---
name : str
    書き込むテーブルの名前.
con : sqlite3.Connection
    SQLiteデータベースへの接続オブジェクト.
"""

pandas.read_sql_query()#

SQLクエリの結果をDataFrameに読み込む.

pandas.read_sql_query(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, chunksize=None)

"""
parameters
---
sql : str
    SQLクエリ文.
con : str or sqlite3 connection
    SQLiteデータベースへの接続オブジェクト.
"""

参考資料#