🦁
SQLAlchemyの基本的な使い方について
SQLAlchemyはPythonで使われるORM(Object Relational Mapper)であり、データベース操作をより簡単に行えるようにするライブラリ。
SQLAlchemyのインストール
簡単なディレクトリを作成し、venv(仮想環境)を使用してSQLAlchemyをインストールしていく。
# 簡単なディレクトリを作成する
$ mkdir ~/sqlalchemy-test
# ディレクトリを移動する
$ cd ~/sqlachemy-test
# venvを作成する
$ python3 -m venv venv
# 仮想環境へ入る。仮想環境へ入れたら左側に(venv)が表示されるようになる。
$ source venv/bin/activate
(venv)...$:
$ pip install sqlalchemy
# 以下コマンドでライブラリがインストールされたか確認する(SQLAlchemyの他に依存モジュールが入ってくる)
$ pip freeze
greenlet==2.0.2
importlib-metadata==6.0.0
SQLAlchemy==2.0.4 <-- 入ってる
typing-extensions==4.5.0
zipp==3.15.0
データベースエンジンの作成
SQLAlchemyを使用する際、データベースエンジンが必要となってくる。
データベースエンジンは、データベースに接続するためのパラメータを指定することで作成することができる。以下、SQLiteを用いたサンプル実装箇所。
from sqlalchemy import create_engine
engine = create_engine('sqlite:///example.db')
テーブルの定義
次に、データベースに格納するデータのテーブルを定義をしている。
テーブルは、データベースエンジンのMetaDataオブジェクトに追加されます。以下は、例としてusersテーブルを定義している。
from sqlalchemy import Table, Column, Integer, String, MetaData
metadata = MetaData()
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('age', Integer),
Column('email', String)
)
テーブルの作成
テーブルを作成するには、データベースエンジンのMetaDataオブジェクトを使用して、create_all()メソッドを呼び出す。このメソッドは、定義されたすべてのテーブルをデータベースに作成する。
metadata.create_all(engine)
データの挿入
データを挿入するには、テーブルに対応するTableオブジェクトを使用して、insert()メソッドを呼び出す。
以下は、usersテーブルにデータを挿入するコード例。
insert_stmt = users.insert().values(name='Alice', age=25, email='alice@example.com')
conn = engine.connect()
conn.execute(insert_stmt)
データの取得
データを取得するには、select()メソッドを使用します。
以下は、usersテーブルから全てのデータを取得している。
select_stmt = users.select()
result = conn.execute(select_stmt)
for row in result:
print(row)
ソースの全体像
上記で説明してきたコードをsqlalchemy_test.pyとして作成。
//twitter.com/ryo__engineer7)
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
engine = create_engine('sqlite:///example.db')
metadata = MetaData()
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('age', Integer),
Column('email', String)
)
metadata.create_all(engine)
insert_stmt = users.insert().values(
name='Alice', age=25, email='alice@example.com')
conn = engine.connect()
conn.execute(insert_stmt)
select_stmt = users.select()
result = conn.execute(select_stmt)
for row in result:
print(row)
実行
以下コマンドで実際にファイルを実行してみる。
(venv)...$ python sqlalchemy_test.py
(1, 'Alice', 25, 'alice@example.com')
↑事前にinsertしていたデータが全て返ってくることが確認できる。
Discussion