如何通过Unix套接字与SQLAlchemy连接GCP PostgreSQL数据库
解决GCP PostgreSQL通过Unix套接字与SQLAlchemy连接的psycopg2 DSN错误
你遇到的错误是因为psycopg2不支持unix_socket这个连接选项,正确的做法是把Unix套接字的路径直接传给host参数,和你本地成功的写法逻辑一致。
修改后的代码示例
from sqlalchemy import create_engine from sqlalchemy.engine import URL # 构建符合要求的数据库连接URL db_url = URL.create( drivername="postgresql+psycopg2", username=params_dic['user'], password=params_dic['password'], database=params_dic['dbname'], host=params_dic['socket'] # 将Unix套接字目录路径作为host传入 ) # 创建连接池 pool = create_engine( db_url, pool_size=5, max_overflow=2, pool_timeout=30, pool_recycle=100 )
关键说明
- psycopg2在处理Unix套接字连接时,会自动在传入的host路径后拼接默认套接字文件名
.s.PGSQL.5432,所以你不需要手动添加这部分内容,直接传入套接字所在的目录路径即可(比如GCP上的/run/cloudsql/<INSTANCE_CONNECTION_NAME>)。 - 确保运行应用的GCP服务账号拥有
Cloud SQL Client角色,且应用所在的资源(如Cloud Run、GKE)已配置好Cloud SQL访问权限(无需公网IP,依赖GCP内部的Unix套接字通道)。
内容的提问来源于stack exchange,提问作者Rodrigo Teodoro
相关产品推荐
相关产品推荐

