Supabase に SQLAlchemy, Alembic で接続する方法
Supabaseのデータベースに、SQLAlchemy・Alembicを使って接続する手順をまとめます。psycopg2をインストールしてから、接続先URLのプロトコルにpostgresql+psycopg2を指定して接続します。
目次
psycopg2をインストールする
psycopg2は、PythonでPostgreSQLデータベースに接続するためのモジュールです。データベースへの接続、クエリの実行、トランザクションの管理、結果の取得などの機能を使えます。
psycopg2のバイナリ版であるpsycopg2-binary
をインストールします。pysopg2とpsycopg2-binaryの違いですが、後者はバイナリ版なので、コンパイラや外部のライブラリ、ビルドが不要でインストールが簡単です。
poetry add psycopg2-binary
SQLAlchemyでSupabaseに接続する
プロトコルにpostgresql+psycopg2
を指定して、create_engine
で接続します。
db_user = parameters["DB_USER"]
db_pass = parameters["DB_PASS"]
db_host = parameters["DB_HOST"]
db_name = parameters["DB_NAME"]
url = f"postgresql+psycopg2://{db_user}:{db_pass}@{db_host}/{db_name}"
engine = create_engine(url)
AlembicでSupabaseに接続する
接続先URLはSQLAlchemyと同じなのですが、alembic.ini
に直接ID・パスワードを書かないように環境変数から取得するようにします。
sqlalchemy.url = postgresql+psycopg2://%(DB_USER)s:%(DB_PASS)s@%(DB_HOST)s/%(DB_NAME)s
alembic/env.py
のrun_migrations_online()
で、iniファイルに記述した環境変数を設定しておきます。
def run_migrations_online() -> None:
"""
Run migrations in 'online' mode.
In this scenario we need to create an Engine
and associate a connection with the context.
"""
config.set_section_option("alembic", "DB_USER", os.environ.get("DB_USER"))
config.set_section_option("alembic", "DB_PASS", os.environ.get("DB_PASS"))
config.set_section_option("alembic", "DB_HOST", os.environ.get("DB_HOST"))
config.set_section_option("alembic", "DB_NAME", os.environ.get("DB_NAME"))
connectable = engine_from_config(
...
Amazon欲しいものリスト
私が作業中に飲んでいるコーヒーや欲しいマンガなどを集めました。開発・執筆の励みになりますのでクリックして頂ければ幸いです。
<Amazon欲しいものリスト>