16

Ich habe die Dokumentation von Google Cloud SQL und verschiedene Suchen durchgesehen, aber ich kann nicht herausfinden, ob es möglich ist, SQLAlchemy mit Google Cloud SQL zu verwenden, und wenn ja, wie sollte die Verbindungs-URI aussehen.Kann SQLAlchemy mit Google Cloud SQL verwendet werden?

Ich suche die Kolben-SQLAlchemy Erweiterung und muß die Verbindungszeichenfolge wie so verwenden: mysql://username:[email protected]/db

Ich sah das Django Beispiel, aber es erscheint die Konfiguration verwendet einen anderen Stil als die Verbindungszeichenfolge. https://developers.google.com/cloud-sql/docs/django

Google Cloud SQL-Dokumentation: https://developers.google.com/cloud-sql/docs/developers_guide_python

Antwort

37

aktualisieren

Google Cloud SQL unterstützt nun den direkten Zugriff, So kann jetzt der Dialekt MySQLdb verwendet werden. Die empfohlene Verbindung über den MySQL-Dialekt wird mit dem URL-Format:

mysql+mysqldb://[email protected]/<dbname>?unix_socket=/cloudsql/<projectid>:<instancename> 

mysql+gaerdbms hat in SQLAlchemy seit Version 1.0

Ich verlasse die ursprüngliche Antwort unten, falls andere noch finden es hilfreich, veraltet.


Für diejenigen, die später diese Frage besuchen (und wollen nicht durch alle Kommentare lesen), SQLAlchemy unterstützt jetzt Google Cloud SQL ab Version 0.7.8 die Verbindungszeichenfolge/Dialekt (siehe: docs):

mysql+gaerdbms:///<dbname> 

ZB:

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

ich einvorgeschlagenan den mysql+gaerdmbs://-Dialekt zur Unterstützung beider Google Cloud SQL-APIs (rdbms_apiproxy und rdbms_googleapi) für die Verbindung mit Cloud SQL von einer nicht von Google App Engine stammenden Produktionsinstanz (z. Ihr Entwicklungsarbeitsplatz).Die Änderung wird auch die Verbindungszeichenfolge leicht ändern, indem das Projekt und die Instanz als Teil der Zeichenfolge eingefügt werden und nicht separat über connect_args übergeben werden müssen.

z.

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

Dadurch wird es auch einfacher Cloud SQL mit Flask-SQLAlchemy oder anderer Erweiterung zu verwenden, wo Sie den create_engine() Anruf nicht explizit.

Wenn Sie Probleme bei der Verbindung mit Google Cloud SQL von Ihrer Entwicklungs-Workstation haben, sollten Sie sich meine Antwort hier ansehen: https://stackoverflow.com/a/14287158/191902.

+3

FYI für jeden anderen, der über diese Antwort stolpert: Diese Methode wird von SQLAlchemy nicht mehr empfohlen; Verwenden Sie stattdessen den MySQLdb-Dialekt: [doc link] (http://docs.sqlalchemy.org/en/latest/dialects/mysql.html?highlight=appengine#module-sqlalchemy.dialects.mysql.gaerdbms) – eaj

4

es machbar ist, obwohl ich nicht Flask verwendet haben, überhaupt so bin ich nicht sicher über die Verbindung durch die Gründung. Ich habe es durch Pyramid arbeiten und legte einen Patch SQLAlchemy (möglicherweise auf den falschen Repo) hier:

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

, die seit dem in SQLAlchemy ersetzt und akzeptiert wurde als

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

I glaube nicht, dass es zu einer Veröffentlichung gekommen ist.

Es gibt einige Probleme mit Google SQL, die verschiedene Ausnahmen auslösen, sodass wir Probleme mit der automatischen Bereitstellung einer Datenbank haben. Sie müssen auch das Verbindungspooling mithilfe von NullPool deaktivieren, wie im zweiten Patch erwähnt.

Wir haben seit der Verwendung des Datenspeichers durch NDB bewegt, damit ich die progess dieser Fehlerbehebungen für eine Weile nicht befolgt haben ..

+0

würden Sie teilen die Gründe für die Entscheidung zu bewegen, um NDB? – van

+0

Grundsätzlich glauben wir, dass es besser zu dem passt, was wir tun. Wir begannen mit SQLAlchemy, weil wir SQL/RDBMS kannten und wir dachten, dass es mindestens eines der besten Python-ORMS ist (nach ein paar begrenzten Recherchen). Aber schließlich ist die Komplexität der Zuordnung eines RDBMS zu Objekten in Ihrem Code nur eine Verschwendung von Aufwand ohne einen wirklich guten Grund, dorthin zu gehen, wenn Sie diese Objekte einfach direkt in einem No-SQL-Datenspeicher speichern können. – lecstor

+0

Ich habe versucht, SQL für ein Projekt zu verwenden, das einen großen Fokus auf das Reporting legt, da die NoSQL-Natur des GAE-DataStore (db/ndb) nicht so einfach zu handhaben ist, ohne eine Menge von De-Normalisierung und Map-Reduzierung. Es wäre großartig, wenn es etwas wie Apache Hive für GAE gäbe, aber ich komme jetzt aus dem Thema. Ich werde in die Änderungsmenge des SQLAlchemy-Problems schauen und von dort gehen. Ich kann den DataStore noch einmal besuchen und die Komplikationen durcharbeiten. Ich weiß, dass es definitiv möglich ist (alles von Google funktioniert so), nur komplizierter für unser Team. –

7

Ja,

Wenn Sie irgendwelche Fehler in SA + Cloud SQL finden, lassen Sie es mich wissen. Ich habe den Dialektcode geschrieben, der in SQLAlchemy integriert wurde. Es gibt ein bisschen albernes Geschäft darüber, wie Cloud SQL Ausnahmebedingungen hervorruft, so dass es dort einige lose Enden geben könnte.

0

Für diejenigen, die PyMySQL über MySQLdb bevorzugen (die in der akzeptierte Antwort vorgeschlagen wird), sind die SQLAlchemy Verbindungszeichenfolgen:

Für Produktion

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

Bitte stellen Sie sicher,

  1. Fügen Sie die SQL ins hinzu tung zu Ihrem app.yaml:

    beta_settings: 
        cloud_sql_instances: <PUT-SQL-INSTANCE-CONNECTION-NAME-HERE> 
    
  2. die API SQL Admin aktivieren as it seems to be necessary:

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

für die lokale Entwicklung

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

gegeben, dass Sie die Cloud SQL-Proxy mit gestartet:

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