0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SQLAlchemy Core (SQL Expression Language) を使うときの備忘録

Posted at

概要

  • SQLAlchemyにはORMCoreがあるが、今回はCoreのみを扱う

参考

環境構築

# Pythonのバージョンを確認
python --version
> Python 3.7.3

# SQLAlchemyのインストール
> pip install SQLAlchemy

メタデータによるスキーマの定義

メタデータとは、テーブルのスキーマをPythonのコード上で定義する方法。
データベース管理システム(DBMS)に依存しない方法でスキーマを記述できる。

以下のようにPythonで書く。

from sqlalchemy import Table, Column, Integer, String, MetaData, create_engine

# インメモリデータベースを使用
engine = create_engine('sqlite:///:memory:')

meta = MetaData(engine, reflect=True)
users = Table('Users', meta,
            Column('id', Integer, primary_key=True),
            Column('name', String),
            Column('age', Integer)
            )

# metaデータの内容をデータベースに反映
meta.create_all()

with engine.connect() as con:
    rows = ({"id": 1, "name": "Sato", "age": 31},
            {"id": 2, "name": "Suzuki", "age": 18},
            {"id": 3, "name": "Yamada", "age": 40},
            {"id": 4, "name": "Tanaka", "age": 30},
            )
    # INSERT文を実行
    for row in rows:
        con.execute("INSERT INTO USERS (id, name, age) VALUES(:id, :name, :age)", row)

    # SELECT文を実行
    rows = con.execute("SELECT * FROM USERS")
    for row in rows:
        print(row)

結果

(1, 'Sato', 31)
(2, 'Suzuki', 18)
(3, 'Yamada', 40)
(4, 'Tanaka', 30)

補足

  • reflect=Trueを指定することにより自動的にデータベースのテーブル情報がメタデータに格納されていることが確認できる。
  • インメモリデータベースはデータをHDDやSSDに保存するのではなく、メモリ上に記録する。そのため、ファイル実行が完了した時や、Pythonコマンドラインを抜けるなど、一連の処理が完了したら記録されていたデータは消えるので簡単に操作を試すときに有用。
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?