著者:飯尾 淳
本連載では「Pythonを昔から使っているものの、それほど使いこなしてはいない」という筆者が、いろいろな日常業務をPythonで処理することで、立派な「蛇使い」に育つことを目指します。その過程を温
かく見守ってください。皆さんと共に勉強していきましょう。第16回では、データを永続的に残す「永続化」の手法の一つとして、Pythonプログラムからデータベースにアクセスする方法について解説します。
シェルスクリプトマガジン Vol.86は以下のリンク先でご購入できます。
図3 データベースにテーブルを作成してデータを格納するコード
1 2 3 4 5 6 7 8 |
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 テーブルのデータを読み出すコード
1 2 3 4 |
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()を忘れたコードの例
1 2 3 4 5 6 |
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 データベースに含まれるテーブルを表示するコード
1 2 3 4 5 6 7 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 ファイル内にデータベースを作成するコード
1 2 3 4 5 6 7 8 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 ファイル内データベースのテーブルからデータを読み出すコード
1 2 3 4 5 6 |
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}") |