SQLAlchemy可以与Google Cloud SQL一起使用吗?

Sea*_*nch 19 python google-app-engine sqlalchemy flask-sqlalchemy google-cloud-sql

我查看了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

Sea*_*nch 44

更新

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

mysql+mysqldb://root@/<dbname>?unix_socket=/cloudsql/<projectid>:<instancename>
Run Code Online (Sandbox Code Playgroud)

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

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


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

mysql+gaerdbms:///<dbname>
Run Code Online (Sandbox Code Playgroud)

例如:

create_engine('mysql+gaerdbms:///mydb', connect_args={"instance":"myinstance"})
Run Code Online (Sandbox Code Playgroud)

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

例如

mysql+gaerdbms:///<dbname>?instance=<project:instance>
Run Code Online (Sandbox Code Playgroud)

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

如果您在从开发工作站连接到Google Cloud SQL时遇到问题,可能需要查看我的答案 - /sf/answers/1000101091/.

  • 对于偶然发现这个答案的其他人的FYI:SQLAlchemy不再推荐这种方法; 改为使用MySQLdb方言:[doc link](http://docs.sqlalchemy.org/en/latest/dialects/mysql.html?highlight=appengine#module-sqlalchemy.dialects.mysql.gaerdbms) (3认同)

小智 8

是,

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


lec*_*tor 5

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

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


Lar*_*erg 5

对于那些更喜欢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>
    
    Run Code Online (Sandbox Code Playgroud)
  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