著者:飯尾 淳
本連載では「Pythonを昔から使っているものの、それほど使いこなしてはいない」という筆者が、いろいろな日常業務をPythonで処理することで、立派な「蛇使い」に育つことを目指します。その過程を温
かく見守ってください。皆さんと共に勉強していきましょう。第16回では、データを永続的に残す「永続化」の手法の一つとして、Pythonプログラムからデータベースにアクセスする方法について解説します。
シェルスクリプトマガジン Vol.86は以下のリンク先でご購入できます。![]()
![]()
図3 データベースにテーブルを作成してデータを格納するコード
from sqlalchemy import text
with engine.connect() as conn:
conn.execute(text("CREATE TABLE a_table (id int, name string)"))
conn.execute(
text("INSERT INTO a_table (id, name) VALUES (:id, :name)"),
[{"id":1, "name":"John"}, {"id":2, "name":"Bob"}],
)
conn.commit()
図5 テーブルのデータを読み出すコード
with engine.connect() as conn:
result = conn.execute(text("SELECT * FROM a_table"))
for record in result:
print(f"id: {record.id}, name: {record.name}")
図6 commit()を忘れたコードの例
with engine.connect() as conn:
conn.execute(
text("INSERT INTO a_table (id, name) VALUES (:id, :name)"),
[{"id":3, "name":"Kate"}, {"id":4, "name":"Bob"}],
)
conn.commit()
図8 データベースに含まれるテーブルを表示するコード
from sqlalchemy import create_engine
engine = create_engine("sqlite:///:memory:", echo=True)
with engine.connect() as conn:
result = conn.execute(
text("SELECT name FROM sqlite_master WHERE type='table'")
)
for record in result:
print(record)
図9 ファイル内にデータベースを作成するコード
from sqlalchemy import create_engine, text
engine = create_engine("sqlite:///db.sqlite3")
with engine.connect() as conn:
conn.execute(text("CREATE TABLE a_table (id int, name string)"))
conn.execute(
text("INSERT INTO a_table (id, name) VALUES (:id, :name)"),
[{"id": 1, "name": "John"}, {"id": 2, "name": "Bob"}],
)
conn.commit()
図10 ファイル内データベースのテーブルからデータを読み出すコード
from sqlalchemy import create_engine, text
engine = create_engine("sqlite:///db.sqlite3")
with engine.connect() as conn:
result = conn.execute(text("SELECT * FROM a_table"))
for record in result:
print(f"id: {record.id}, name: {record.name}")