使用 Google 连接器将 alembic 连接到 Cloud SQL

问题描述 投票:0回答:1

我按照此链接中的代码将我的 fastapi 项目连接到 Cloud SQL 1

from sqlalchemy import create_engine
from sqlalchemy.engine import Engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from google.cloud.sql.connector import Connector

# helper function to return SQLAlchemy connection pool
def init_connection_pool(connector: Connector) -> Engine:
    # Python Connector database connection function
    def getconn():
        conn = connector.connect(
            "project:region:instance-name", # Cloud SQL Instance Connection Name
            "pg8000",
            user="my-user",
            password="my-password",
            db="my-database",
            ip_type="public"  # "private" for private IP
        )
        return conn

    SQLALCHEMY_DATABASE_URL = "postgresql+pg8000://"

    engine = create_engine(
        SQLALCHEMY_DATABASE_URL , creator=getconn
    )
    return engine

# initialize Cloud SQL Python Connector
connector = Connector()

# create connection pool engine
engine = init_connection_pool(connector)

# create SQLAlchemy ORM session
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()

我想按照同样的方法将 alembic 连接到 Cloud SQL。据我所知,我应该在 alembic.ini 文件中设置 sqlalembic.url 。我没有记录如何与谷歌连接器连接。有办法吗?

我运行

cloud-sql-proxy PROJECT_NAME:REGIN:SQLDB
,我可以很好地完成该项目。

https://github.com/GoogleCloudPlatform/cloud-sql-python-connector/blob/main/README.md

fastapi google-cloud-sql alembic
1个回答
0
投票

以下是使用 Google Cloud SQL Python 连接器将 Alembic 连接到 Cloud SQL 的要点:

  1. alembic.ini:

    • 使用连接字符串格式设置
      sqlalchemy.url
    postgresql+pg8000://{user}:{password}@localhost:{port}/{database}
  • 将占位符替换为您的 Cloud SQL 凭据和详细信息。

  • localhost
    指向本地运行的
    cloud-sql-proxy

  1. 可选:重用连接池(env.py):

    • 从 FastAPI 项目的实用程序中导入
      init\_connection\_pool
      。使用从
      init\_connection\_pool
      .
    • 返回的引擎对象
  2. 云 SQL 代理:

    • 使用正确的参数运行 cloud-sql-proxy:
./cloud-sql-proxy --address=0.0.0.0 --port=1234 <project>:<region>:<instance-name>

记住:

  • 使用环境变量来获取敏感信息。

  • 连接字符串中的localhost指向本地cloud-sql-proxy。

参考:

© www.soinside.com 2019 - 2024. All rights reserved.