mysqli_connect google engine conectar con app python google-app-engine sqlalchemy flask-sqlalchemy google-cloud-sql

python - engine - ¿Se puede usar SQLAlchemy con Google Cloud SQL?



google app engine connect to cloud sql (4)

Para aquellos que prefieren PyMySQL sobre MySQLdb (que se sugiere en la respuesta aceptada), las cadenas de conexión SQLAlchemy son:

Para produccion

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

Por favor asegúrese de

  1. Agrega la instancia de SQL a tu app.yaml :

    beta_settings: cloud_sql_instances: <PUT-SQL-INSTANCE-CONNECTION-NAME-HERE>

  2. Habilite la API de administración de SQL ya que parece ser necesario :

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

Para el desarrollo local

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

Dado que inició el Proxy Cloud SQL con:

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

He revisado la documentación de Google Cloud SQL y varias búsquedas, pero no puedo averiguar si es posible usar SQLAlchemy con Google Cloud SQL, y si es así, cuál debe ser la conexión URI.

Estoy buscando usar la extensión Flask-SQLAlchemy y necesito la cadena de conexión así: mysql://username:password@server/db

Vi el ejemplo de Django, pero parece que la configuración usa un estilo diferente al de la cadena de conexión. https://developers.google.com/cloud-sql/docs/django

Documentación de Google Cloud SQL: https://developers.google.com/cloud-sql/docs/developers_guide_python


Sí,

Si encuentra algún error en SA + Cloud SQL, por favor hágamelo saber. Escribí el código de dialecto que se integró en SQLAlchemy. Hay un poco de tontería acerca de cómo Cloud SQL genera excepciones, por lo que podría haber algunos cabos sueltos allí.


es factible, aunque no he usado Flask en absoluto, así que no estoy seguro de establecer la conexión a través de eso. Lo conseguí trabajando a través de Pyramid y envié un parche a SQLAlchemy (posiblemente al repositorio incorrecto) aquí:

https://bitbucket.org/sqlalchemy/sqlalchemy/pull-request/2/added-a-dialect-for-google-app-engines

Eso ha sido reemplazado y aceptado en SQLAlchemy como

http://www.sqlalchemy.org/trac/ticket/2484

Sin embargo, no creo que haya llegado a un lanzamiento.

Hay algunos problemas con Google SQL al lanzar diferentes excepciones, por lo que tuvimos problemas con cosas como implementar una base de datos automáticamente. También debe deshabilitar la agrupación de conexiones utilizando NullPool como se menciona en el segundo parche.

Desde entonces, hemos pasado a utilizar el almacén de datos a través de NDB, por lo que no he seguido el progreso de estas correcciones durante un tiempo.


Actualizar

Google Cloud SQL ahora admite acceso directo, por lo que ahora se puede usar el dialecto MySQLdb . La conexión recomendada a través del dialecto mysql está utilizando el formato de URL:

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

mysql+gaerdbms está en desuso en SQLAlchemy desde la versión 1.0

Dejo la respuesta original a continuación en caso de que a otros les resulte útil.

Para aquellos que visiten esta pregunta más adelante (y no quieran leer todos los comentarios), SQLAlchemy ahora admite Google Cloud SQL a partir de la versión 0.7.8 usando la cadena de conexión / dialecto (ver: docs ):

mysql+gaerdbms:///<dbname>

P.ej:

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

He propuesto una update del dialecto mysql+gaerdmbs:// para que sea compatible con las API de Google Cloud SQL ( rdbms_apiproxy y rdbms_googleapi ) para conectarse a Cloud SQL desde una instancia de producción que no sea Google App Engine (por ejemplo, su estación de trabajo de desarrollo). El cambio también modificará ligeramente la cadena de conexión al incluir el proyecto y la instancia como parte de la cadena, y no requerirá que se pase por separado a través de connect_args .

P.ej

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

Esto también facilitará el uso de Cloud SQL con Flask-SQLAlchemy u otra extensión donde no haga explícitamente la llamada a create_engine() .

Si tiene problemas para conectarse a Google Cloud SQL desde su estación de trabajo de desarrollo, es posible que desee ver mi respuesta aquí: https://.com/a/14287158/191902 .