我正在尝试使用psycopg2连接到Google Cloud SQL Postgres。
我已经创建了一个postgreSQL实例,目前使用默认数据库postgres
。我可以从pgadmin工具和gcloud shell进行连接,查询会给出预期的结果。
我已经开发了一个flask应用程序并部署在标准应用程序引擎上。
conn = psycopg2.connect(database="postgres", user = "postgres", password = "password", host = "/cloudsql/my-new-db")
当我运行它时,会出现getpsycopg2.OperationalError: could not connect to server: No such file or directory
错误。
我有一种预感,主机值不正确。我尝试了各种选择,比如/cloudsql/<prj-name>.<region>.<db-instance-name>
但是,似乎什么都不起作用。我还应该做些什么来删除此错误?
unix_socket = '/cloudsql/{}'.format("my-project-id:us-central1:my-db-name")
conn = psycopg2.connect(database="postgres", user = "postgres", password = "password", host = unix_socket)
这对我有效。
如本文所述,从应用程序引擎连接到云SQL:
与Unix套接字连接
正确配置后,您可以通过以下路径将服务连接到Cloud SQL实例的Unix域套接字,该套接字在环境的文件系统上访问:/cloudsql/instance_CONNECTION_NAME。
INSTANCE_CONNECTION_NAME可以在谷歌云控制台的实例概览页面上找到,也可以运行以下命令:
gcloud sql instances describe [INSTANCE_NAME]
编辑:格式化
在flask服务器上确保安装psycopg2库(pip-install或使用apt-get-install(。我附上了一小段代码,我已经成功地连接到我的Postgres数据库,也许它会在某种程度上有所帮助。我注意到您没有指定端口。
connection = psycopg2.connect(
user = 'userName',
password = password,
host = 'some ip here',
port = '5432',
database = 'db name here'
)
在我的情况下,主机是服务器的IP,它有一个转发到我的烧瓶服务器的端口。我不确定你是如何访问你的主机的。我的flask API和DB实际上托管在谷歌云中的独立虚拟机上。我希望这能有所帮助,如果没有,也许可以提供更多的背景,我可以多看一看。