【PythonでORM】SQLAlchemyのインストール

【PythonでORM】SQLAlchemyのインストール プログラミング

「個人情報漏えいを防ぎたい・・・」
「SQLインジェクションを防ぐ手段を探している」
「PythonにORMライブラリは存在しているのか?」

このような場合には、SQLAlchemyがオススメです。
この記事では、SQLAlchemyについて解説しています。

本記事の内容

  • SQLAlchemyとは?
  • SQLAlchemyのシステム要件
  • SQLAlchemyのインストール
  • SQLAlchemyの動作確認

それでは、上記に沿って解説していきます。

SQLAlchemyとは?

SQLAlchemyは、ORM(Object Relational Mapper)ライブラリです。
ObjectとRelationalを関連付けるのが、ORMの役割になります。

Objectは、オブジェクト指向におけるオブジェクトのことです。
Relationalは、リレーショナル・データベースを指します。

よって、クラス(オブジェクト)とRDBを関連付けるのがORMの機能になります。
ORMを利用すれば、SQL文を記述する必要がなくなります。

そうなると、SQL文を書くことなくデータベース処理をコーディングできます。
その結果、コードの見通しはよくなります。

さらに、SQLインジェクションと言った攻撃を受けなくなります。
SQLインジェクションについては、次の記事において触れています。

SQLインジェクションは、個人情報漏えいにまでつながってしまう可能性があります。
それを防ぐために手段として、ORMが用いられます。

そして、それをPythonで利用できるのがSQLAlchemyということです。

以上、SQLAlchemyについて解説しました。
次は、SQLAlchemyのシステム要件を説明します。

SQLAlchemyのシステム要件

現時点(2022年7月)でのSQLAlchemyの最新バージョンは、1.4.39となります。
この最新バージョンは、2022年6月25日にリリースされています。

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

サポート対象となるPythonのバージョンは、以下となっています。

  • Python 2.7
  • Python 3.6
  • Python 3.7
  • Python 3.8
  • Python 3.9
  • Python 3.10

Python 2系のサポートを継続しているのは、なかなか頑張っています。
でも、以下のPython公式開発サイクルに合わせるのがベターでしょうね。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月

セキュリティのことなどを考えたら、新しいバージョンのPythonを利用する方が安全です。
納品するようなシステムであれば、責任問題にもなりかねません。

そのこともあり、ここではPython 3.7以降を推奨しておきます。
したがって、SQLAlchemyはPython 3.7以降がシステム要件になると言っておきます。

あと、注意すべきはドライバーに関することになります。
SQLAlchemyは、あくまでORMの機能を持つライブラリです。

そのため、ドライバーの機能を備えていません。
データベースに接続するには、各DB用のドライバーが必要になります。

例えば、PostgreSQLとMariaDB(MySQL)だけでも以下ドライバーが存在しています。

このようなドライバーが、データベース毎に用意されています。
利用するデータベース毎に、ドライバーは別途インストールする必要があります。

以上、SQLAlchemyのシステム要件を説明しました。
次は、SQLAlchemyのインストールを説明します。

SQLAlchemyのインストール

検証は、次のバージョンのPythonで行います。

$ python -V
Python 3.10.2

まずは、現状のインストール済みパッケージを確認しておきます。

$ pip list
Package    Version
---------- -------
pip        22.1.2
setuptools 63.1.0
wheel      0.36.2

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、SQLAlchemyのインストールです。
SQLAlchemyのインストールは、以下のコマンドとなります。

pip install SQLAlchemy

SQLAlchemyのインストールは、すぐに終わります。
終了したら、どんなパッケージがインストールされたのかを確認します。

$ pip list
Package    Version
---------- -------
greenlet   1.1.2
pip        22.1.2
setuptools 63.1.0
SQLAlchemy 1.4.39
wheel      0.36.2

依存するパッケージは、greenletだけです。
その意味では、既存環境へ容易にSQLAlchemyを導入できると言えます。

以上、SQLAlchemyのインストールを説明しました。
次は、SQLAlchemyの動作確認を説明します。

SQLAlchemyの動作確認

SQLAlchemyの動作確認を行います。
テーブルにあるデータを照会する動作を確認してみましょう。

そのためには、最初に準備を整える必要があります。
次のように説明を進めていきます。

  • SQLiteのインストール
  • サンプルデータの取得
  • SQLAlchemyによるデータ抽出

SQLiteのインストール

今回は、SQLiteを利用しましょう。
実は、SQLiteであればドライバーを別途追加でインストール不要です。

SQLiteだけは、SQLAlchemyからデフォルトで利用可能になります。
だからこそ、動作確認にも最適なデータベースと言えます。

そのSQLiteのインストールについては、次の記事を参考にしてください。

サンプルデータの取得

次の記事を参考にしてSQLite用サンプルデータを用意します。

chinook.dbを用意できれば、内容を確認します。
まずは、データベースに接続。

$ sqlite3 chinook.db

接続できたら、テーブル一覧を確認します。

sqlite> .tables
albums          employees       invoices        playlists     
artists         genres          media_types     tracks        
customers       invoice_items   playlist_track

この中から、次のテーブルを対象にします。

sqlite> .schema media_types
CREATE TABLE IF NOT EXISTS "media_types"
(
    [MediaTypeId] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    [Name] NVARCHAR(120)
);

SQLAlchemyを用いて、media_typesの全データを抽出してみましょう。

sqlite> SELECT * FROM media_types;
1|MPEG audio file
2|Protected AAC audio file
3|Protected MPEG-4 video file
4|Purchased AAC audio file
5|AAC audio file

SQLAlchemyによるデータ抽出

SQLite用サンプルデータは、プログラムと同じディレクトリ上に設置しています。
動作確認に用いるコードは、以下。

import sqlalchemy
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker

Base = declarative_base()


class MediaType(Base):
    MediaTypeId = Column(Integer, primary_key=True)
    Name = Column(String(length=120))

    __tablename__ = 'media_types'


engine = sqlalchemy.create_engine('sqlite:///chinook.db', echo=False)
session = sessionmaker(bind=engine)()
query_result = session.query(MediaType)
for media_type in query_result:
    print(media_type.MediaTypeId, media_type.Name)

MediaTypeというクラスを宣言しています。
このクラスを用いることにより、SELECT文を記述する必要がありません。

上記を実行した結果は、以下。

1 MPEG audio file
2 Protected AAC audio file
3 Protected MPEG-4 video file
4 Purchased AAC audio file
5 AAC audio file

SQLAlchemyを用いて、全データを抽出できています。
これでSQLAlchemyの動作確認は、問題ないでしょう。

以上、SQLAlchemyの動作確認を説明しました。

タイトルとURLをコピーしました