【发布时间】:2019-06-14 16:52:36
【问题描述】:
我对此有很多问题,并找到了多种不同类型的语法来执行此操作,但到目前为止,它们似乎都不起作用。
https://cloud.google.com/sql/docs/mysql/connect-app-engine 根据谷歌的这个教程,似乎 sqlalchemy 是 迄今为止我从未使用过的最佳工具。
我遵循了所有其他说明,但我不知道在哪里 /cloudsql/INSTANCE_CONNECTION_NAME 已列出。 我假设它所指的套接字是 SQL 概述页面上的实例连接页面。我的看起来像 MYPROJECT:us-east1:MYSQLINSTANCE。 我还看到了一些将 SQL 实例换成数据库名称的文档,所以我也尝试了,但没有成功。
现在我的 Python 连接字符串看起来像
db = sqlalchemy.create_engine(
unix_socket=/cloudsql/MYPROJECT:us-east1:MYSQLINSTANCE
sqlalchemy.engine.url.URL(
drivername='mysql+pymysql',
username=MYUSERNAME,
password=MYPASSWORD,
database=MYDATABASE,
query={
'unix_socket': '/cloudsql/{}'.format('MYPROJECT:us-east1:MYSQLINSTANCE')
}
),
pool_size=10,
max_overflow=2,
pool_timeout=30, # 30 seconds
pool_recycle=1800, # 30 minutes
)
现在它告诉我它无法连接到本地主机上的 SQL 实例,即使我显然没有尝试连接本地主机。 我尝试使用教程中定义的 App.YAML 中定义的环境变量进行连接,并且还根据我在网上找到的几个不同版本的语法修改了 App.YAML,但实际上似乎没有任何组合有效。所以现在我只是将变量直接插入到我的 main.py 中,我知道这不太安全。
我也尝试将连接 URL 设置为长 URL,例如
db = sqlalchemy.create_engine(
unix_socket=/cloudsql/MYPROJECT:us-east1:MYSQLINSTANCE
sqlalchemy.engine.url.URL(mysql+pymysql://<db_user>:<db_pass>@/<db_name>?unix_socket=/cloudsql/<MYPROJECT>:us-east1:<MYSQLINSTANCE>
),
pool_size=10,
max_overflow=2,
pool_timeout=30, # 30 seconds
pool_recycle=1800, # 30 minutes
)
这给了我一个看起来像 无法加载插件:sqlalchemy.dialects:mysql.pymysql://(我在上面输入的那个 URL)
我还研究了通过 SQL 页面上列出的公共 IP 地址进行连接,但这需要将连接列入白名单,而且我不确定 Appengine 应用程序将从哪个 IP 连接。无论如何,我不确定目前最好的方法是什么,并且非常感谢建立这种联系的任何帮助。在这一点上,我只是用头撞墙。
【问题讨论】:
标签: google-app-engine google-cloud-platform google-cloud-sql