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

如何使用Python安全便捷地连接Cloud SQL?

安全便捷的Python连接Cloud SQL推荐方案

首推Cloud SQL Auth代理,它能搞定绝大多数连接痛点——不用手动管理SSL证书、不用维护IP白名单、自动加密所有连接,不管是本地开发还是GCP生产环境都适用。

为什么选Auth代理?

  • 安全层面:代理通过IAM身份验证,自动建立加密连接,数据库无需暴露公网IP,彻底规避IP白名单的维护风险和证书过期问题。
  • 便捷层面:本地和生产环境的连接代码可以高度统一,不用因为环境差异修改配置。

本地开发场景步骤

  1. 安装并启动Auth代理
    推荐用Docker启动(无需手动处理版本):

    docker run -d -p 5432:5432 gcr.io/cloudsql-docker/gce-proxy:latest /cloud_sql_proxy -instances=your-project:region:instance-name=tcp:0.0.0.0:5432
    

    也可以直接用二进制文件:

    # Linux/macOS
    ./cloud-sql-proxy your-project:region:instance-name
    # Windows
    cloud-sql-proxy.exe your-project:region:instance-name
    
  2. Python连接代码
    直接连接本地代理转发的端口即可,无需额外SSL配置:

    PostgreSQL(psycopg2)

    import psycopg2
    
    def get_db_connection():
        try:
            conn = psycopg2.connect(
                user="db_username",
                password="db_password",
                host="127.0.0.1",
                port="5432",
                dbname="db_name"
            )
            return conn
        except Exception as e:
            print(f"连接失败: {e}")
            raise
    

    MySQL(pymysql)

    import pymysql
    
    def get_db_connection():
        try:
            conn = pymysql.connect(
                user="db_username",
                password="db_password",
                host="127.0.0.1",
                port=3306,
                db="db_name"
            )
            return conn
        except Exception as e:
            print(f"连接失败: {e}")
            raise
    

GCP生产环境场景(Cloud Run/App Engine/GCE)

  1. 配置权限
    给运行Python服务的服务账号添加Cloud SQL Client角色,确保服务能访问Cloud SQL实例。

  2. 连接方式

    • Cloud Run/App Engine标准环境:直接在服务配置中关联Cloud SQL实例,代码里用127.0.0.1和对应端口连接(和本地代码一致)。
    • GCE/App Engine灵活环境:可以直接使用Unix域套接字连接,无需启动代理进程:

      PostgreSQL套接字连接

      conn = psycopg2.connect(
          user="db_username",
          password="db_password",
          host="/cloudsql/your-project:region:instance-name",
          dbname="db_name"
      )
      

      MySQL套接字连接

      conn = pymysql.connect(
          user="db_username",
          password="db_password",
          unix_socket="/cloudsql/your-project:region:instance-name",
          db="db_name"
      )
      

额外提示

  • 不要硬编码数据库密码,建议用GCP Secret Manager或者环境变量存储敏感信息。
  • 如果使用ORM(比如SQLAlchemy),只需对应调整连接字符串的host/端口或套接字路径即可,逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 01:45:40