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データベースへの接続オブジェクト.
"""