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.pyrun_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欲しいものリスト>