我查看了Google Cloud SQL的文档和各种搜索,但我无法确定是否可以将SQLAlchemy与Google Cloud SQL一起使用,如果是,那么连接URI应该是什么。
我希望使用Flask-SQLAlchemy扩展,并且需要连接字符串,如下所示:
mysql://username:password@server/db
我看到了Django示例,但看起来配置使用的风格与连接字符串不同。 https://developers.google.com/cloud-sql/docs/django
Google Cloud SQL文档: https://developers.google.com/cloud-sql/docs/developers_guide_python
答案 0 :(得分:41)
<强>更新强>
Google Cloud SQL现在支持直接访问,因此现在可以使用MySQLdb
方言。通过mysql方言建议的连接使用URL格式:
mysql+mysqldb://root@/<dbname>?unix_socket=/cloudsql/<projectid>:<instancename>
自1.0版以来SQLAlchemy中的 mysql+gaerdbms
has been deprecated
我将在下面留下原始答案,以防其他人仍然觉得有用。
对于稍后访问此问题的人(并且不想阅读所有评论),SQLAlchemy现在使用连接字符串/方言支持版本0.7.8的Google Cloud SQL(请参阅:docs ):
mysql+gaerdbms:///<dbname>
E.g:
create_engine('mysql+gaerdbms:///mydb', connect_args={"instance":"myinstance"})
我向mysql+gaerdmbs://
方言提出了update,以支持两种Google Cloud SQL API(rdbms_apiproxy
和rdbms_googleapi
)从非SQL连接到Cloud SQL Google App Engine生产实例(例如您的开发工作站)。此更改还将通过将项目和实例作为字符串的一部分包含在内来稍微修改连接字符串,而不需要通过connect_args
单独传递。
E.g。
mysql+gaerdbms:///<dbname>?instance=<project:instance>
这也可以让您更轻松地将Cloud SQL与Flask-SQLAlchemy或其他未明确进行create_engine()
调用的扩展程序一起使用。
如果您在开发工作站上连接Google Cloud SQL时遇到问题,可能需要在此处查看我的答案 - https://stackoverflow.com/a/14287158/191902。
答案 1 :(得分:7)
是,
如果您在SA + Cloud SQL中发现任何错误,请告诉我们。我编写了集成到SQLAlchemy中的方言代码。关于Cloud SQL如何冒泡异常有一些愚蠢的事情,所以可能会有一些松散的目标。
答案 2 :(得分:4)
https://bitbucket.org/sqlalchemy/sqlalchemy/pull-request/2/added-a-dialect-for-google-app-engines
此后已被SQLAlchemy替换并接受为
http://www.sqlalchemy.org/trac/ticket/2484
我不认为它是通过发布的方式。
Google SQL存在一些问题,引发了不同的异常,因此我们遇到了自动部署数据库等问题。您还需要使用NullPool禁用连接池,如第二个补丁中所述。
我们已经转移到通过NDB使用数据存储区,所以我有一段时间没有遵循这些修复程序的进展..
答案 3 :(得分:2)
对于那些喜欢PyMySQL而不是MySQLdb的人(在接受的答案中建议),SQLAlchemy连接字符串是:
生产
mysql+pymysql://<USER>:<PASSWORD>@/<DATABASE_NAME>?unix_socket=/cloudsql/<PUT-SQL-INSTANCE-CONNECTION-NAME-HERE>
请务必
将SQL实例添加到app.yaml
:
beta_settings:
cloud_sql_instances: <PUT-SQL-INSTANCE-CONNECTION-NAME-HERE>
启用SQL Admin API as it seems to be necessary:
https://console.developers.google.com/apis/api/sqladmin.googleapis.com/overview
适用于本地开发
mysql+pymysql://<USER>:<PASSWORD>@localhost:3306/<DATABASE_NAME>
假设您使用以下命令启动了Cloud SQL Proxy:
cloud_sql_proxy -instances=<PUT-SQL-INSTANCE-CONNECTION-NAME-HERE>=tcp:3306
答案 4 :(得分:0)
添加信息以防有人在寻找如何使用 flask_sqlalchemy
和 PostgreSQL
:使用 pg8000
作为驱动程序,工作连接字符串是
postgres+pg8000://<db_user>:<db_pass>@/<db_name>