SQLAlchemyとORM について

SQLAlchemyを使ってみよう

Pythonには標準のsqlite3モジュール以外に、データベースとやり取りするためのライブラリーが多数あります。 その中で最も有名なライブラリーがSQLAlchemyです。 「SQL + Alchemy(錬金術)」の名の通り、多彩なデータベースのプログラミングを可能にします。

SQLを書かずにデータを操作する

SQLAlchemyは、SQL文の組み立てを自動で行ってくれます。 ライブラリーが用意している関数を使うことでSELECT文やINSERT文などが実行されます。

ORM(Object-Relational Mapping)

SQLAlchemyのように、データベースとPythonのオブジェクトの関連付け(マッピング)をするライブラリーのことを ORM(ORマッパー) と呼びます。

usersテーブルとUserクラスの関連付けを確認しましょう。

usersテーブルの定義

id   : integer (auto increment)
name : varchar(45)
kana : varchar(45)
note : varchar(100)

Userクラスの定義

class User(Base):
    __tablename__ = 'users'  # Userクラス ←→ usersテーブル

    # 変数名 ←→ カラム名
    id = Column(Integer, primary_key=True)
    name = Column(String)
    kana = Column(String)
    note = Column(String)

オブジェクト(Object)とリレーショナル・データベース(RDB)の関連付け(Mapping)を行うことから、ORM(Object-Relational Mapping)と呼ばれます。

ORMを使うメリット

ORMには以下のようなメリットがあります。

Pythonのオブジェクトを通してSQLを扱うことができる

ORMが自動でSQLを生成してくれるので、プログラムがPythonの世界で完結するようになります。 コマンドや実行結果をPythonから扱うことができ、柔軟なデータ操作が行えます。

データベースごとの違いを吸収してくれる

データベースにはMySQLPostgreSQLなどいくつかの種類があり、コマンドなどに違いがあります。 ORMは自動で使用するデータベースに合わせたSQLを生成して実行してくれます。 また、データベースによるコマンドの違いを「SQLの方言」と呼びます。

ORMはSQLを多用する複雑なアプリケーションを実装するときに力を発揮します。