シェルスクリプトマガジン

Pythonあれこれ(Vol.86掲載)

著者:飯尾 淳

本連載では「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}")