Python SQLite3モジュール#
SQLiteは、軽量なデータベースエンジンであり、Pythonの標準ライブラリに含まれています。Pythonでは、sqlite3
モジュールを使用してSQLiteデータベースを操作できます。
Pythonを使用する経験がない場合は,以下の手順でColabを使用してSQLiteデータベースを操作できます。
Googleアカウントにログインします。
Google Colabにアクセスします。
「+ New notebook」をクリックして新しいノートブックを作成します。
ソースコードをセルにコピー&ペーストします。
実行ボタンまたはShift + Enterキーを押してセルを実行します。
必要に応じて、「+ 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データベースへの接続オブジェクト.
"""