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