Python3 の 定番ORM 「 SQLAlchemy 」で MySQL ・ SQLite 等を操作 – 導入からサンプルコード

 

SQLAlchemy とは

SQLAlchemy (エスキューエル・アルケミー)は Python の ORM(Object Relational Mapper)です。Python 用 ORM の中では最も有名で、多くのプロジェクトで採用されています。

メリット

SQLite、MySQL 、PostgreSQL 等のデータベースを操作するには SQL を使いますが、SQLAlchemy を導入すると、SQL を直接記述することなしに、Python オブジェクトによりデータベースを “Pythonic” に操作できるようになります。

データベースの種類によらず同一のソースコードで操作できるので、複数データベースを併用する場合やデータベースを変更する場合にもコードの書き換えが必要ない、といったメリットもあります。

対応データベース

SQLAlchemy は以下のデータベースに対応しています(2018年3月時点)。

  • Firebird
  • Microsoft SQL Server
  • MySQL
  • Oracle
  • PostgreSQL
  • SQLite
  • Sybase

関連リンク

ウェブサイト
https://www.sqlalchemy.org/

ドキュメント
https://docs.sqlalchemy.org/en/latest/

 

インストール・導入方法

SQLAlchemy によりデータベースを操作するには、以下のインストールが必要です。

  • Python
  • データベース本体
  • ドライバ
  • SQLAlchemy

ここでは SQLite と MySQL について導入方法を紹介します。

Python 3 と MySQL 本体のインストールについては割愛します。あらかじめインストールください。

SQLite + SQLAlchemy

Python3 はデフォルトで SQLite のドライバ・モジュールがインストールされています。そのため pip コマンドで SQLAlchemy をインストールすれば導入完了です。

 

MySQL + SQLAlchemy

MySQL の場合にはドライバのインストールが必須です。ここではMySQL 操作の記事で紹介した mysqlclient(MySQLdb)をインストールします。

 

続いて SQLArchemy をインストールして導入完了です。

ここで紹介した mysqlclient(MySQLdb)以外に MySQL Connector/Python 、PyMySQL 等のドライバが対応しています。MySQL の対応ドライバについては下記を参照ください。
http://docs.sqlalchemy.org/en/latest/dialects/mysql.html

PostgreSQL、Oracle、SQL Server など

その他の DB も MySQL 同様に「ドライバ」と「SQLAlchemy」の2点をインストールするだけです。各DBのドライバは下記より確認できます。

上記以外のDBについては、下記ページから情報を得ることができます。
http://docs.sqlalchemy.org/en/latest/dialects/

 

SQLAlchemy を用いたワークフロー

どのORMもそうであるように、データの保存や抽出を行うまでに多少の準備が必要になります。SQLAlchemy による典型的なワークフローを頭に入れておきましょう。

  1. モジュールの読み込み
  2. データベースエンジンの作成
  3. モデルとテーブルの作成
  4. セッションの作成とCRUD処理の実行

サンプルコードで具体的に見てきましょう。

 

1. モジュールの読み込み

まずはモジュールを読み込みます。

 

※今回のサンプルでは以上をインポートしていますが、必要に応じて追加・削除しましょう。

 

2. データベースエンジンの作成

モジュールをインポートしたら、エンジンを作成します。

MySQL 使用時

DB接続に必要な情報を引数として渡します。

 

SQLite 使用時

SQLite の場合はファイルのパスを指定します。

 

SQLite の場合はメモリ(インメモリ)として使うこともできます。

 

データベースにより異なるのは、このエンジンの作成処理だけです。他の処理はデータベースによらず同一のソースコードで実行できます。

 

SQLAlchemy を導入していれば、エンジン作成処理の1行だけで MySQL と SQLite を切り替えることができます。

 

3. モデルとテーブルの作成

テーブルを操作するためのモデルを作成し、そのモデルからテーブルを作成します。

以下のサンプルでは Student モデルを作成し、それをもとに studentsというテーブルを生成しています。

 

これで準備完了です。

モデルを使ってCRUD処理を行なっていきましょう。

Django を使ったことがあるなら「モデル作成とマイグレーション(によるテーブル作成)をしている」、というとピンとくるかもしれません。※だだし、SQLAlchemy の場合、テーブル履歴管理をしないという点は異なります。

 

4. セッションの作成とCRUD処理の実行

SQLAlchemy はセッションを介して SELECT / INSERT / UPDATE / DELETE 等のクエリを実行します。

セッションの作成

セッションの終了

データベース処理が必要なくなったら、session.colose() でセッションを終了しましょう。

 

INSERT

1レコードの追加

session.add() メソッドによりレコードを追加できます。

 

複数レコードの同時追加

session.add_all() メソッドにより複数レコードを同時追加できます。

 

SELECT

全件取得

 

1件取得

 

id による1件取得

 

ソート(ORDER BY)

 

部分抽出(LIMIT と OFFSET)

 

条件指定(WHERE)

LIKE / AND / OR など条件指定についてサンプルを紹介します。

 

レコード数の取得

 

UPDATE

データを変更する場合には、変更したいレコードを抽出 →  新しい値をプロパティーに代入 → session.add(レコードオブジェクト)  という3つの処理を実行します。session.commit() により変更内容をデータベースに保存するのを忘れないようにしましょう。

コードを見てもらった方が早いかと思います…。

 

DELETE

データを削除する場合には、削除したいレコードを抽出 → session.delete(レコードオブジェクト)という2つの処理を実行します。session.commit() により変更内容をデータベースに保存するのを忘れないようにしましょう。

全件削除

 

以上です、お疲れまでした!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です