「PythonからPostgreSQLにアクセスしたい」
「とにかくパフォーマンス重視でDBアクセスを行いたい」
「psycopg2より高速な処理ができるライブラリを探している」
このような場合には、asyncpgがおススメです。
この記事では、asyncpgのついて解説しています。
本記事の内容
- asyncpgとは?
- asyncpgのシステム要件
- asyncpgのインストール
- asyncpgの動作確認
それでは、上記に沿って解説していきます。
asyncpgとは?
asyncpgとは、PythonからPostgreSQLにアクセスするためのライブラリです。
特徴としては、asyncpgはasyncio(非同期 I/O)をベースに動きます。
非同期処理をベースにしているためか、パフォーマンスが突出しています。
以下は、公式で公開されているパフォーマンステストの結果です。
同じような機能を持つpsycopg2の結果も載っています。
結果を比較すると、asyncpgはpsycopg2の約3倍高速ということです。
psycopg2については、次の記事で説明しています。
とにかくパフォーマンスを追求するなら、asyncpgという選択肢になるのでしょう。
そして、それがasyncpgを使う最大の利点でもあります。
以上、asyncpgについて説明しました。
次は、asyncpgのシステム要件を確認します。
asyncpgのシステム要件
現時点(2021年10月)でのasyncpgの最新バージョンは、0.24.0となります。
この最新バージョンは、2021年8月10日にリリースされています。
サポートOSに関しては、以下を含むクロスプラットフォーム対応です。
- Windows
- macOS
- Linux
サポート対象となるPythonのバージョンは、以下となります。
- Python 3.6
- Python 3.7
- Python 3.8
- Python 3.9
- Python 3.10
これは完璧なサポート状況です。
次の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 3.6以降なら仕様変更はそんなにないでしょう。
しかし、こうやって利用者に向けて適切に情報を発信する姿勢が素晴らしいです。
このスタンスだけでも、asyncpgが信用できるライブラリだと判断できます。
もちろん、それは質も含めてです。
まとめると、Python 3.6以降なら基本的には問題ないと言えます。
もっと言うと、Python公式開発サイクルに従っていれば問題ないということです。
以上、asyncpgのシステム要件を説明しました。
次は、asyncpgをインストールします。
asyncpgのインストール
検証は、次のPythonバージョンで行います。
>python -V Python 3.9.7
まずは、現状のインストール済みパッケージを確認しておきます。
>pip list Package Version ---------- ------- pip 21.3 setuptools 58.2.0
次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip setuptools
では、asyncpgのインストールです。
asyncpgのインストールは、以下のコマンドとなります。
pip install asyncpg
インストールは、一瞬で終わります。
では、どんなパッケージがインストールされたのかを確認しましょう。
>pip list Package Version ---------- ------- asyncpg 0.24.0 pip 21.3 setuptools 58.2.0
依存関係のあるパッケージは、何もありません。
asyncpg単独のインストールであれば、既存環境への導入は何も問題がないでしょう。
パッケージの依存関係でのトラブルは、一切ないということです。
以上、asyncpgのインストールについて説明しました。
最後は、asyncpgの動作確認を行います。
asyncpgの動作確認
asyncpgの動作確認を行うサンプルコードです。
import asyncio import asyncpg async def run(): conn = await asyncpg.connect(user='ユーザー名', password='パスワード', database='データベース名', host='ホスト名(IPアドレスもOK)') values = await conn.fetch( 'select version()' ) print(values) await conn.close() loop = asyncio.get_event_loop() loop.run_until_complete(run())
上記を実行すれば、以下のような表示となります。
[<Record version='PostgreSQL 13.3 (Ubuntu 13.3-1.pgdg20.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, 64-bit'>]
これは、PostgreSQLのバージョンをSQLで取得した結果です。
この結果が出れば、asyncpgの動作確認は問題なしと言えます。
なお、 PostgreSQL側で外部接続許可の設定は前提となります。
この設定については、次の記事で説明しています。
以上、asyncpgの動作確認を説明しました。