python - 在 Cloud Functions 中使用 Cloud SQL (Postgres)

标签 python postgresql google-cloud-functions psycopg2 google-cloud-sql

我正在尝试使用 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()

我也试试 code sampleGoogle 提供它直接使用 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 Functions 的服务帐户添加到 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()

最佳答案

确保检查以下事项:

  • 启用 Cloud SQL Admin API
  • 确保 Functions 默认服务帐户具有 Cloud SQL Client IAM 角色

如果您在两个项目之间进行连接,请确保启用 Admin API 并向运行您尝试连接的函数的服务帐户授予权限(针对两个项目)。

关于python - 在 Cloud Functions 中使用 Cloud SQL (Postgres),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57932337/

相关文章:

python - pandas.read_excel 的类型错误

Python并发.futures.ThreadPoolExecutor max_workers

sql - PostgreSQL 将行转置为列

java - 如何通过jdbc将数据从数据流加载到postgresql中

javascript - Cloud Functions for Firebase onWrite 触发器 : snapshot. val 不是函数

python - Python语言会成为 future 最快的语言吗?

python - Ubuntu pyautogui .screenshot() 返回黑屏图像

sql - 将 Oracle MERGE 语句迁移到 PostgreSQL UPSERT 语句

javascript - 在 Cloud Functions for Firebase 中启用 CORS

python - 输出 :\ntorch-1. 1.0-cp27-cp27mu-linux_x86_64.whl 不是此平台上支持的轮子 - Pytorch/云函数