You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flask应用中不使用SQLAlchemy通过psycopg2连接Google Cloud SQL

使用psycopg2连接Cloud SQL(PostgreSQL)的正确方案

两种连接方式本身都是可行的,你遇到的问题大概率是配置遗漏或权限错误,以下是针对性的修正方案和排查步骤:

一、公网IP连接的正确配置

这种方式需要确保Cloud SQL的公网访问权限和网络规则都配置到位:

  • 启用Cloud SQL实例的公网IP,并在控制台「连接」>「公共IP」中,添加Cloud Run服务的出站IP段(或临时开放0.0.0.0/0用于测试,生产环境禁用)
  • 连接字符串需明确指定PostgreSQL端口(默认5432),避免端口匹配错误:
connectionString = 'dbname=%s user=%s password=%s host=%s port=5432' % (db_name, db_username, user_pwd, public_IP)
conn = psycopg2.connect(connectionString)
  • 验证数据库用户权限:确保该用户被允许从外部IP连接(Cloud SQL控制台可配置用户的连接来源)
  • 检查防火墙规则:确认Cloud Run所在VPC的出站规则允许访问5432端口

二、Unix套接字连接的正确配置

这是Cloud Run连接Cloud SQL的推荐方式(更安全、无需公网IP),核心是补充部署时的配置:

  • 部署Cloud Run服务时,必须添加Cloud SQL实例关联:
    • 用gcloud命令部署需加参数:--add-cloudsql-instances=my-project-id:us-central1:my-db-name
    • 控制台部署则在「连接」>「Cloud SQL」选项中选择目标实例
  • 确保Cloud Run使用的服务账号拥有「Cloud SQL客户端」角色(roles/cloudsql.client),否则无权限访问套接字
  • 你的连接代码本身没问题,但需确认实例路径(项目ID:区域:实例名)完全无拼写错误:
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)

三、快速排查步骤

  1. 本地测试连接:用psql命令或本地psycopg2代码连接Cloud SQL公网IP,确认数据库本身可正常访问
  2. 查看Cloud Run日志:在控制台「日志」中查看具体报错信息(如权限拒绝、连接超时),快速定位问题点
  3. 核对服务账号权限:检查Cloud Run默认服务账号是否已配置Cloud SQL客户端权限

内容的提问来源于stack exchange,提问作者zahlawi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 00:18:12