仅使用pyscopg2从App引擎连接到Cloud SQL Postgres

时间:2017-09-17 01:27:00

标签: python postgresql google-app-engine psycopg2

我无法弄清楚这里出了什么问题。

我使用纯psycopg2开发了一个Python / Flask Web应用程序。最初使用Postgres的本地实例,然后我在谷歌上启动了一个Postgres Cloud SQL并使用

连接到它
   conn = psycopg2.connect(database="********", user = "********", password = "**********", host = "104.***.***.**", port = "5432")

现在我需要部署应用程序,但根据我从文档中理解的内容,我不能只使用IP。然而,文档示例都基于SQLAlchamy,我之前没有使用过它,并且不想在其中重写我的应用程序。

根据我的理解,Cloud SQL根据指定实例的app.yaml中的条目在代理中加载实例。它是这样做的。 unix socket。所以我试过

conn = psycopg2.connect(database="********", user = "********", password = "**********", host = "/cloudsql/[my instance name here]")

我尝试了云控制台,并使用加载到unix套接字的开发代理并预览了应用程序,它似乎工作得很好。但是当我部署这个工作版本时。它仍然无法连接到数据库。

所以我在这里做错了什么

1 个答案:

答案 0 :(得分:1)

我能够找出问题所在。对我这样的业余爱好者来说,这是一个相当的学习过程,但无论如何。我的假设是正确的。 Cloud SQL根据指定实例的app.yaml中的条目在代理中加载实例。它是在unix socket中实现的(对于像我这样的业余爱好者来说,这是一个文件夹而不是IP的路径)。所以连接字符串应该如下所示

conn = psycopg2.connect(database="********", user = "********", password = "**********", host = "/cloudsql/my instance name here")

注意没有端口设置,因为这会混淆psycopg2和底层的Postgres库。

但是,之前没有工作的原因是因为未启用Cloud SQL API。当我首先阅读文档时,我认为这只是意味着在我已经做过的项目中设置Cloud SQL数据库。我错了,这是一个单独的步骤,基本上包括在项目的API部分单击启用。一旦启用。一切正常。