У меня есть приложение Django, которое я написал 5 лет go, которое успешно работало в Google App Engine - до прошлого месяца, когда Google перешел на Облако второго поколения SQL.
В настоящее время у меня есть файл settings.py, который содержит определение базы данных, которое выглядит следующим образом:
DATABASES = {
'default': {
'ENGINE': 'google.appengine.ext.django.backends.rdbms',
'INSTANCE': 'my-project-name:my-db-instance',
'NAME': 'my-db-name',
},
Руководство по обновлению Google , сообщает, что имя соединения необходимо изменить с ' my-project-name: my-db-instance 'to' my-project-name: my-region: my-db-instance '. Это достаточно просто. Изменение этого приводит меня к ошибке
InternalError at / login /
(0, у вас нет прав доступа к экземпляру: my-project-name: my-region: my -db-instance ')
Согласно этому вопросу , мне нужно добавить префикс' / cloudsql / 'к имени моего экземпляра. Итак, я изменил это (и спецификацию ENGINE), чтобы дать:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'INSTANCE': '/cloudsql/my-project-name:my-region:my-db-instance',
'NAME': 'my-db-name',
'USER' : 'root',
'PASSWORD': '******************',
},
Я загрузил измененный файл в Google (используя развертывание приложения gcloud). На этот раз я получаю совершенно другой экран ошибок, на котором отображается:
Ошибка: ошибка сервера
Сервер обнаружил ошибку и не смог выполнить ваш запрос.
Пожалуйста повторите попытку через 30 секунд.
Когда я просматриваю Журналы, я вижу:
Неправильно сконфигурировано: Ошибка загрузки модуля MySQLdb: Нет модуля с именем MySQLdb
* * * * * * * * * * * * * * * * * * * * * * * * * * * *1040* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Плитка * * * * * * * * [10] Соединения с базой данных теперь должны быть сделаны с помощью сокета домена Unix.
Google предоставляет документацию и примеры того, как это сделать. Однако я не считаю инструкции Google очень полезными. Для подключения приложения Python они дают следующий пример кода:
main.py:
db = sqlalchemy.create_engine(
sqlalchemy.engine.url.URL(
drivername="mysql+pymysql",
username=db_user,
password=db_pass,
database=db_name,
query={"unix_socket": "/cloudsql/{}".format(cloud_sql_connection_name)},
),
)
В моем приложении нет файла main.py, поэтому я действительно не уверен, куда поместить этот код. Я посмотрел полный пример кода для этого в GitHub, но я не знаю, какие изменения мне нужно внести в мой файл settings.py или в другое место в моем приложении.
Мой вопрос: сделать Мне действительно нужно go по этому маршруту (перейти на использование библиотеки SQLalchemy), или я могу обновить свое приложение Django для работы с экземпляром Google Cloud SQL второго поколения, просто внеся некоторые изменения в мой файл settings.py ? И, если да, что изменится?
Мое приложение использует Django 1.4, Python 2.7, и я не использую фреймворк Flask, который предлагает Google.
Я узнал использовать Django исключительно для целей написания этого приложения 5 лет go, но я не использовал его с тех пор - поэтому я забыл почти все, что я знал о Django и Python.