[Python #19] SQLAlchemyでデータベースを操作する
こんにちは。PythonチームのH.Kと申します。今回は、Pythonでデータベースを扱うライブラリ、SQLAlchemyの話をしようと思います。
SQLAlchemyとは
SQLAlchemyとは、Pythonでデータベースを扱うためのライブラリです。SQLを直接記述せずとも、Pythonのコードを書くだけでデータベースを操作することができます。また、MySQLやSQLiteなどの様々なデータベースを同一のコードで操作することが可能です。
SQLAlchemyの使い方
1. DBを読み込むための設定
from sqlalchemy import create_engine
engine = create_engine('sqlite:///sample_db.sqlite3', echo=False)
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
まずはデータベースを読み込み、エンジンを作成します。今回はSQLiteのデータベースを読み込むことを想定しています。
次にベースクラスを作成します。これはPythonでデータベースをクラスとして扱うための準備になります。
以上の手順が何をやっているかよくわからない、という場合は、SQLAlchemyでデータベースを扱うにはこういう準備が必要なんだ、程度に認識していただければ大丈夫です。
2. モデルクラスの作成
from settings import Base, engine
Base.metadata.bind = engine
class Telephones(Base):
__tablename__ = "telephones"
__table_args__ = {"autoload": True}
今回はtelephonesというテーブルをTelephonesクラスとして読み込みます。telephonesテーブルは以下のような構造になっています。
Field | Type | Primary key |
---|---|---|
id | INTEGER | YES |
list_id | INTEGER | NO |
phone_number | VARCHAR(255) | NO |
called_flag | INTEGER | NO |
3. セッションを作成する
from sqlalchemy.orm import sessionmaker
SessionClass = sessionmaker(engine) # セッションを作るクラスを作成
session = SessionClass()
SQLAlchemyはセッションを通してクエリを実行するので、そのためのセッションを作成します。
4. テーブルの中身を読み込む
phone_session = session.query(Telephones).first() #telehonesテーブルの最初のレコードを返す
phones_session = session.query(Telephones).all() #telephonesテーブルの全レコードを返す
not_called = session.queryquery(Telephones).filter(Telehones.called_flag == 0).all() #telephonesテーブルの、called_flagカラムが0のレコードをすべて返す
以上のようにして、テーブルの中身を取得できます。レコードのINSERTやUPDATE,DELETEを行うこともできますがここでは割愛します。
おわりに
このように、SQLAlchemyを使えばPythonコード上でデータベースを操作することができます。ファイナルアンサーで運用しているシステムでもこちらを多用しています。SQLデータベースに興味がある人はぜひPythonチームに応募してみてください。