如何使用psycopg2通过SSL连接Google Cloud SQL PostgreSQL数据库
别担心,基础问题完全没毛病!我来一步步帮你搞定用psycopg2连接带SSL加密的GCP PostgreSQL实例的事儿——毕竟刚接触加密技术的时候,这些配置确实容易懵。
连接启用SSL的GCP PostgreSQL实例(psycopg2 + Python3.6)
第一步:先搞定psycopg2的安装
因为你用的是conda管理的Python3.6,优先用conda安装psycopg2,这样能避免很多编译依赖的问题:
conda install -c anaconda psycopg2
如果conda安装卡壳了,换用conda环境里的pip安装预编译版本的psycopg2-binary,省心又快捷:
pip install psycopg2-binary
小提示:如果是Python3.6,最新版的psycopg2-binary可能不兼容,遇到报错的话,指定一个适配的版本就行:
pip install psycopg2-binary==2.8.6
第二步:编写连接代码
你已经下载了三个关键证书文件:server-ca.pem、client-cert.pem、client-key.pem,先把它们放在一个容易找到的文件夹里(比如本地新建个./certs/目录),然后用下面的代码测试连接:
import psycopg2 from psycopg2 import OperationalError def connect_gcp_postgres(): conn = None try: # 替换成你自己的数据库信息 conn = psycopg2.connect( dbname="你的数据库名称", user="你的数据库用户名", password="你的数据库密码", host="你的GCP实例公网IP/域名", port="5432", # PostgreSQL默认端口,没改的话不用动 sslmode="verify-ca", # 验证服务器CA证书,确保连接安全 sslrootcert="./certs/server-ca.pem", # CA证书路径 sslcert="./certs/client-cert.pem", # 客户端证书路径 sslkey="./certs/client-key.pem" # 客户端密钥路径 ) print("✅ 数据库连接成功!") except OperationalError as e: print(f"❌ 连接失败:{e}") finally: # 记得用完关闭连接 if conn: conn.close() # 调用函数测试 connect_gcp_postgres()
必看的注意事项
- 证书路径要准确:如果不确定路径是否正确,可以用
import os; print(os.path.abspath("./certs/server-ca.pem"))来打印绝对路径,确保文件确实存在。 - 密钥文件权限:如果是Linux/macOS系统,
client-key.pem的权限必须设为600(只有自己能读写),不然psycopg2会拒绝使用:
chmod 600 ./certs/client-key.pem
- GCP实例配置检查:别忘了在GCP控制台的SQL实例页面,确认:
- 你的本地IP已经添加到「授权网络」里
- 实例的SSL状态是「允许(需要客户端证书)」或者「强制」
内容的提问来源于stack exchange,提问作者mrt
相关产品推荐
相关产品推荐

