Может ли SQLAlchemy использоваться с Google Cloud SQL?

Я просмотрел документацию Google Cloud SQL и различные поисковые запросы, но я не могу выяснить, можно ли использовать SQLAlchemy с Google Cloud SQL, и если да, то каким должен быть URI соединения.

Я использую расширение Flask-SQLAlchemy и нуждаюсь в строке подключения следующим образом: mysql://username:[email protected]/db

Я видел пример Django, но, похоже, в конфигурации используется другой стиль, чем строка подключения. https://developers.google.com/cloud-sql/docs/django

Документация Google Cloud SQL: https://developers.google.com/cloud-sql/docs/developers_guide_python

Ответы

Ответ 1

Обновление

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

mysql+mysqldb://[email protected]/<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().

Если у вас возникли проблемы с подключением к Google Cloud SQL с рабочей станции разработки, вы можете посмотреть мой ответ здесь - fooobar.com/questions/325154/.... p >

Ответ 2

Да,

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

Ответ 3

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

Ответ 4

Для тех, кто предпочитает PyMySQL над MySQLdb (что предлагается в принятом ответе), строки соединения SQLAlchemy:

Для производства

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

Пожалуйста, убедитесь, что

Для локального развития

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

учитывая, что вы запустили прокси-сервер Cloud SQL с помощью:

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