我无法弄清楚这里出了什么问题。
我使用纯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套接字的开发代理并预览了应用程序,它似乎工作得很好。但是当我部署这个工作版本时。它仍然无法连接到数据库。
所以我在这里做错了什么
答案 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部分单击启用。一旦启用。一切正常。