postgresql 如何在不使用SQLAlchemy的情况下将Google Cloud SQL用于Flask Web应用程序

ibps3vxo  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(139)

我的应用程序是一个Flask Web服务器,有一个postgresql后端。到目前为止,我一直在运行在服务器所在的同一计算引擎上设置DB。我正在通过Google Cloud SQL将我的数据库从计算引擎转换到专用的DB服务器。我的flask web应用程序最好能在Google Cloud Run上运行。
我一直很难在网上找到任何关于只使用psycopg2而不使用SQLAlchemy建立连接的说明。我的应用程序不是使用SQLAlchemy构建的,如果有一个简单的解决方案可以解决我的问题,我不愿意转换它。
我已经尝试了下面的方法,但根本无法连接到数据库:

connectionString = 'dbname=%s user=%s password=%s host=%s' % (db_name, db_username, user_pwd, public_IP)
conn = psycopg2.connect(connectionString)

字符串
或者是

connectionString = 'dbname=%s user=%s password=%s host=%s' % (db_name, db_username, user_pwd, '/cloudsql/{}'.format("my-project-id:us-central1:my-db-name"))
conn = psycopg2.connect(connectionString)


这两种情况都无法连接到Cloud SQL。我使用公共IP的代码似乎会加载一段时间,但不会连接。
这可以用Cloud SQL来实现吗?如果没有,是否有任何替代办法可以做到这一点?

zvms9eto

zvms9eto1#

只要您通过Unix套接字部署了Cloud SQL Proxy,您展示的第二个示例就可以用于连接。
要在本地测试应用程序,您需要安装代理,然后运行以下命令:

./cloud-sql-proxy --unix-socket /cloudsql <PROJECT_ID>:<INSTANCE_REGION>:<INSTANCE_NAME> &

字符串
要通过Cloud Run运行Cloud SQL代理,如果您通过gcloud部署,则可以使用--add-cloudsql-instances

gcloud run deploy <SERVICE_NAME> \
  --add-cloudsql-instances <PROJECT_ID>:<INSTANCE_REGION>:<INSTANCE_NAME>


否则,如果您使用的是Cloud Console,则只需将“Cloud SQL Connection”添加到Cloud Run服务,Unix套接字连接应该可以工作。

相关问题