32

我查看了 Google Cloud SQL 的文档和各种搜索,但我无法确定是否可以将 SQLAlchemy 与 Google Cloud SQL 一起使用,如果可以,连接 URI 应该是什么。

我正在寻找使用 Flask-SQLAlchemy 扩展并需要像这样的连接字符串: mysql://username:password@server/db

我看到了 Django 示例,但似乎配置使用了与连接字符串不同的样式。 https://developers.google.com/cloud-sql/docs/django

谷歌云 SQL 文档: https ://developers.google.com/cloud-sql/docs/developers_guide_python

4

5 回答 5

52

更新

Google Cloud SQL 现在支持直接访问,因此MySQLdb现在可以使用方言。通过 mysql 方言推荐的连接是使用 URL 格式:

mysql+mysqldb://root@/<dbname>?unix_socket=/cloudsql/<projectid>:<instancename>

mysql+gaerdbms 自 1.0 版以来已在 SQLAlchemy中弃用

我将在下面留下原始答案,以防其他人仍然觉得它有帮助。


对于那些稍后访问此问题(并且不想阅读所有评论)的人,SQLAlchemy 现在使用连接字符串/方言支持 Google Cloud SQL 版本 0.7.8(请参阅:文档):

mysql+gaerdbms:///<dbname>

例如:

create_engine('mysql+gaerdbms:///mydb', connect_args={"instance":"myinstance"})

我已提议对方言进行更新mysql+gaerdmbs://,以支持 Google Cloud SQL API (rdbms_apiproxyrdbms_googleapi) 用于从非 Google App Engine 生产实例(例如您的开发工作站)连接到 Cloud SQL。该更改还将通过将项目和实例作为字符串的一部分来稍微修改连接字符串,并且不需要通过connect_args.

例如

mysql+gaerdbms:///<dbname>?instance=<project:instance>

这也将使您更容易将 Cloud SQL 与 Flask-SQLAlchemy 或您未明确进行create_engine()调用的其他扩展一起使用。

如果您在从开发工作站连接到 Google Cloud SQL 时遇到问题,您可能想在此处查看我的答案 - https://stackoverflow.com/a/14287158/191902

于 2012-06-05T16:07:24.337 回答
8

是的,

如果您在 SA+Cloud SQL 中发现任何错误,请告诉我。我编写了集成到 SQLAlchemy 中的方言代码。关于 Cloud SQL 如何冒泡异常有一些愚蠢的事情,所以那里可能有一些松散的结局。

于 2012-06-25T18:05:43.397 回答
6

对于那些更喜欢PyMySQL而不是MySQLdb的人(在接受的答案中建议),SQLAlchemy 连接字符串是:

生产用

mysql+pymysql://<USER>:<PASSWORD>@/<DATABASE_NAME>?unix_socket=/cloudsql/<PUT-SQL-INSTANCE-CONNECTION-NAME-HERE>

请确保

  1. 将 SQL 实例添加到您的app.yaml

    beta_settings:
        cloud_sql_instances: <PUT-SQL-INSTANCE-CONNECTION-NAME-HERE>
    
  2. 启用 SQL Admin API ,因为它似乎是必要的

    https://console.developers.google.com/apis/api/sqladmin.googleapis.com/overview

地方发展

mysql+pymysql://<USER>:<PASSWORD>@localhost:3306/<DATABASE_NAME>

假设您使用以下方式启动 Cloud SQL 代理:

cloud_sql_proxy -instances=<PUT-SQL-INSTANCE-CONNECTION-NAME-HERE>=tcp:3306

于 2017-09-28T11:21:44.613 回答
5

这是可行的,虽然我根本没有使用过 Flask,所以我不确定通过它建立连接。我通过 Pyramid 让它工作并在这里向 SQLAlchemy 提交了一个补丁(可能是错误的 repo):

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 使用数据存储,所以我有一段时间没有关注这些修复的进展了。

于 2012-05-26T03:29:31.463 回答
0

PostgreSQL、pg8000 和 flask_sqlalchemy

添加信息以防有人在寻找如何使用flask_sqlalchemywith PostgreSQL:使用pg8000作为驱动程序,工作连接字符串是

postgres+pg8000://<db_user>:<db_pass>@/<db_name>
于 2021-05-24T19:55:00.633 回答