SQLite3はPythonに最初から入っていることや、ファイルとしてDBを保存できることなどからPythonで最も簡単に扱えるデータベースと言えます。
そこでここでは、Pythonを用いたSQLite3のデータの書き込み/読み出しのサンプルコードをメモしておきます。
基本
import sqlite3
# 接続DBファイルの指定
conn = sqlite3.connect('example.sqlite3')
conn.row_factory = sqlite3.Row
c = conn.cursor()
# SQL文の実行
sql="create table persons(name, age, job)"
c.execute(sql)
# 変更の保存
conn.commit()
# DBから切断
conn.close()
SQL文を実行した後、その変更を反映するためには「conn.commit()」を実行する必要があります。
テーブル操作
テーブルの作成
sql="create table persons(name, age, job)"
c.execute(sql)
ここでは例としてname・age・jobの3つのカラムを持つ「persons」テーブルを作成しています。
テーブルにカラムを追加
sql="alter table persons add column address"
c.execute(sql)
「persons」テーブルに「address」のカラムを追加
テーブルを削除
sql="drop table persons"
c.execute(sql)
「persons」テーブルを削除する処理
テーブル名の変更
sql="alter table persons rename to workers"
c.execute(sql)
「persons」テーブルを「workers」に名称変更
データの操作
データの追加(INSERT)
sql="insert into persons values ('Ann', '20','apprentice')"
c.execute(sql)
データの変更(UPDATE)
sql="update persons set age=21 where name='Ann'"
c.execute(sql)
このコードでは「persons」テーブル内の「name='Ann'」のAgeを21に変更しています。
データの削除(DELETE)
sql="delete from persons where age<20"
c.execute(sql)
このコードでは「persons」テーブル内のageが20以下のデータが削除されます。
データの取り出し
基本
sql="select * from persons"
c.execute(sql)
全部取り出す場合はこのコードで事足ります。
データサイズが小さい場合はDBから全部取得した後にPython側のPandasなどで処理したほうが分かりやすいかもしれません。
取り出したデータをリストに展開
import sqlite3
# DBに接続
conn = sqlite3.connect('example.sqlite3')
conn.row_factory = sqlite3.Row #dict型を指定
c = conn.cursor()
# DBの中身を取得
c.execute('select * from persons')
results = c.fetchall()
# 展開用に空リストを作成
persons_list=[]
# リストに展開する処理
for r in results:
persons_list.append(r)
# DBから切断
conn.close()
# 表示
display(persons_list)
「persons_list」に行データを格納しています。取り出すときは
persons_list[0]['name']
## ann
この様にすると取り出せます。
一部取り出し(カラム名指定)
sql="select name from persons"
c.execute(sql)
name列だけ取り出すコード
一部取り出し(条件指定)
sql="select * from persons where age>20"
c.execute(sql)
ageが21以上の行を抽出
データの取り出し順を指定
# 昇順で取り出し
sql="select * from persons order by age asc"
c.execute(sql)
# 降順で取り出し
sql="select * from persons order by age desc"
c.execute(sql)
PandasでSQLを読み込み
import sqlite3
import pandas as pd
conn = sqlite3.connect("sample01.sql")
conn.row_factory = sqlite3.Row
c = conn.cursor()
sql="select * from persons"
df = pd.read_sql_query(sql, conn)
c.close()
conn.close()
PandasでSQLを保存
import sqlite3
import pandas as pd
conn = sqlite3.connect("sample01.sql")
conn.row_factory = sqlite3.Row
c = conn.cursor()
df.to_sql('data_name', conn, if_exists='replace')
c.close()
conn.close()
参考ページ
[Python3][SQLite3]レコードを辞書型(dict型)で取得する簡単な方法 - Qiita
SQLite入門
PythonからSQLite3で初めてのデータベース! - Qiita