Может ли 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

Обновить

Google Cloud SQL теперь поддерживает прямой доступ, поэтому теперь можно использовать MySQLdb . Рекомендуемое соединение через диалоги mysql использует формат URL:

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

mysql+gaerdbms устарел в SQLAlchemy с версии 1.0

Я оставляю первоначальный ответ ниже, если другие все еще считают его полезным.


Для тех, кто позже посещает этот вопрос (и не хочет читать все комментарии), SQLAlchemy теперь поддерживает Google Cloud SQL с версии 0.7.8, используя строку / диалект подключения (см .: docs ):

 mysql+gaerdbms:///<dbname> 

Например:

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

Я предложил обновление для mysql+gaerdmbs:// для поддержки обоих API Google Cloud SQL ( rdbms_apiproxy и rdbms_googleapi ) для подключения к Cloud SQL из экземпляра для производства, отличного от Google App Engine (например, рабочей станции разработки). Это изменение также немного изменит строку подключения, включив проект и экземпляр в качестве части строки, и не требует передачи отдельно через connect_args .

Например

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

Это также облегчит использование Cloud SQL с Flask-SQLAlchemy или другим расширением, если вы явно не create_engine() вызов create_engine() .

Если у вас возникли проблемы с подключением к Google Cloud SQL с рабочей станции разработки, вы можете взглянуть на мой ответ здесь – https://stackoverflow.com/a/14287158/191902 .

Да,

Если вы обнаружили ошибки в SA + Cloud SQL, сообщите мне об этом. Я написал код диалекта, который был интегрирован в SQLAlchemy. Есть немного глупых дел о том, как Cloud SQL генерирует исключения, поэтому там могут быть некоторые свободные концы.

это выполнимо, хотя я вообще не использовал 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, поэтому я не следил за прогрессом этих исправлений некоторое время.

веселит,

J

Для тех, кто предпочитает 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. Включите API-интерфейс SQL Admin, поскольку он кажется необходимым :

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

Для местного развития

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

учитывая, что вы запустили Cloud Proxy с помощью:

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