【问题标题】:Connecting to Cloud SQL Postgres from App engine with pyscopg2 only仅使用 psycopg2 从 App 引擎连接到 Cloud SQL Postgres
【发布时间】:2017-09-17 01:26:59
【问题描述】:

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

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

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

现在我需要部署应用程序,但根据我从文档中了解到的情况,我不能只使用 IP。但是,文档示例全部基于我以前没有使用过的 SQLAlchamy,并且不希望在其中重写我的应用程序。

据我了解,Cloud SQL 根据 app.yaml 中指定实例的条目将实例加载到代理中。它在 a 中这样做。 Unix 套接字。所以我尝试了

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

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

那我做错了什么

【问题讨论】:

    标签: python postgresql google-app-engine psycopg2


    【解决方案1】:

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

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

    请注意缺少端口设置,因为这只会混淆 psycopg2 和底层 Postgres 库。

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

    【讨论】:

      猜你喜欢
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      • 2020-06-07
      • 2019-03-29
      • 2017-12-05
      • 2019-04-19
      • 2020-01-27
      相关资源
      最近更新 更多