「個人情報漏えいを防ぎたい・・・」
「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.6 | 2016年12月23日 | 2021年12月23日 |
3.7 | 2018年6月27日 | 2023年6月27日 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.10 | 2021年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の動作確認を説明しました。