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

时间:2012-05-26 02:31:16

标签: 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

5 个答案:

答案 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_apiproxyrdbms_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)

虽然我根本没有使用过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使用数据存储区,所以我有一段时间没有遵循这些修复程序的进展..

答案 3 :(得分:2)

对于那些喜欢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 as it seems to be necessary

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

  3. 适用于本地开发

    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)

PostgreSQL、pg8000 和 flask_sqlalchemy

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

postgres+pg8000://<db_user>:<db_pass>@/<db_name>