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
Agrega la instancia de SQL a tu
app.yaml
:beta_settings: cloud_sql_instances: <PUT-SQL-INSTANCE-CONNECTION-NAME-HERE>
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 .