【发布时间】:2019-09-14 04:01:08
【问题描述】:
我正在尝试使用 Cloud Function Python 脚本连接到运行 PostgreSQL 11 的 Cloud SQL。理想情况下,我想使用简单的pandas.DataFrame.to_sql() 连接到数据库,这需要sqlalchemy.create_engine() 进行连接。
这是我目前的尝试(我尝试了有/没有/.s.PGSQL.5432后缀):
engine = sqlalchemy.create_engine('postgresql+psycopg2://USERNAME:PASSWORD@/DB_NAME?host=/cloudsql/INSTANCE_CONNECTION_NAME/.s.PGSQL.5432')
engine.connect()
我也尝试了Google提供的code sample,它直接使用psycopg2,但也没有用
Error: function crashed. Details:
could not connect to server: Connection refused
Is the server running locally and accepting
connections on Unix domain socket "/cloudsql/vida-production:us-central1:vida-ops/.s.PGSQL.5432"?
编辑:
感谢@kurtisvg 指出这一点。由于 Cloud Function 正在尝试连接到不同项目上的 Cloud SQL。我必须将 Cloud Function 的服务帐号添加到 Cloud SQL 项目的 IAM。
设置 IAM 后,我用来将 sqlalchemy 引擎连接到 Cloud SQL 的 Python 代码是这样的:
# Don't add the "/.s.PGSQL.5432 suffix" because it will already be added back automatically by the library...
engine = sqlalchemy.create_engine('postgresql+psycopg2://USERNAME:PASSWORD@/DB_NAME?host=/cloudsql/INSTANCE_CONNECTION_NAME')
engine.connect()
【问题讨论】:
-
您使用的是第二代云sql实例吗? cloud.google.com/functions/docs/…
-
@DougStevenson 是的,我已经验证我使用的是第二代 Cloud SQL
标签: python postgresql google-cloud-functions psycopg2 google-cloud-sql