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

Python连接CloudSQL PostgreSQL数据库报错排查求助

GCP CloudSQL PostgreSQL 连接错误排查与解决

1. AttributeError: module 'google.cloud.sql.connector.connector' has no attribute 'connect'

原因:google-cloud-sql-connector版本更新后API变更,旧代码直接调用connector.connect的写法已废弃,新版本需要先实例化Connector类再调用连接方法。
解决方法:修改导入和连接逻辑,先创建Connector实例再调用connect:

from google.cloud.sql.connector import Connector
# 实例化Connector对象
connector = Connector()
# 调用实例的connect方法
conn = connector.connect(...)

2. ConnectionRefusedError: [Errno 61] Connection refused

原因:

  • CloudSQL实例未配置允许本地连接:比如公网IP未将本地IP加入授权网络,或私有IP环境下本地未接入对应VPC。
  • 连接器未正确代理到CloudSQL实例,导致尝试连接本地5432端口(默认PostgreSQL端口)。
    解决方法:
  • 公网IP连接:登录GCP控制台,找到对应CloudSQL实例,在「连接」>「授权网络」中添加本地公网IP。
  • 私有IP连接:确保本地通过Cloud VPN、Cloud Interconnect或VPC peering接入实例所在VPC;或改用Cloud SQL Auth Proxy辅助连接。
  • 检查实例连接名是否正确,避免因名称错误导致连接器无法定位实例。

3. 400 Bad Request (调用connectSettings接口失败)

原因:实例连接名格式错误或拼写错误,导致SQL Admin API无法识别目标实例。实例连接名必须严格遵循项目ID:区域:实例名格式。
解决方法:

  • 核对GCP控制台中实例的「连接名」字段,确保项目ID、区域、实例名拼写完全一致,无空格或多余符号。
  • 比如你的实例正确连接名应为angelic-hexagon-307814:us-central1:sqlpg1234,确认代码中传入的是这个值。

4. 401 UNAUTHENTICATED (凭证缺失)

原因:本地未配置GCP认证凭证,导致无法调用SQL Admin API获取实例连接信息。
解决方法:

  • 开发环境:安装gcloud CLI后执行gcloud auth application-default login,按提示完成登录,生成应用默认凭证。
  • 生产环境:创建具有Cloud SQL Client角色的服务账号,下载密钥文件,设置环境变量:
    export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your-service-account-key.json"
    

修正后的完整代码

# Copyright 2021 Google LLC.
# SPDX-License-Identifier: Apache-2.0

import os
from google.cloud.sql.connector import Connector
import pg8000

# 初始化Connector
connector = Connector()

def get_db_connection():
    return connector.connect(
        os.getenv("CLOUD_SQL_INSTANCE"),  # 环境变量存实例连接名:angelic-hexagon-307814:us-central1:sqlpg1234
        "pg8000",
        user=os.getenv("DB_USER"),        # 环境变量存数据库用户名:test1
        password=os.getenv("DB_PASS"),    # 环境变量存数据库密码:test1
        db=os.getenv("DB_NAME")           # 环境变量存数据库名:postgres
    )

# 获取连接并执行查询
conn = get_db_connection()
cursor = conn.cursor()

try:
    cursor.execute("SELECT * from accounts")
    results = cursor.fetchall()
    for row in results:
        print(row)
finally:
    # 关闭资源
    cursor.close()
    conn.close()
    connector.close()

环境变量设置示例

export CLOUD_SQL_INSTANCE="angelic-hexagon-307814:us-central1:sqlpg1234"
export DB_USER="test1"
export DB_PASS="test1"
export DB_NAME="postgres"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:40:30