У меня было много проблем с этим, и я нашел несколько различных типов синтаксиса, чтобы сделать это, и пока что ни один из них, похоже, не работает.
https://cloud.google.com/sql/docs/mysql/connect-app-engine на основе этого урокаИз Google кажется, что sqlalchemy - лучший инструмент для использования, которого я никогда не видел до сих пор.
Я следовал всем остальным инструкциям, но не могу понять, где находится / cloudsql / INSTANCE_CONNECTION_NAME.Я предполагаю, что сокет, на который он ссылается, является страницей соединения экземпляра на странице обзора SQL.Мой выглядит примерно так: MYPROJECT: us-east1: MYSQLINSTANCE.Я также видел некоторую документацию, в которой экземпляр SQL заменен на имя базы данных, поэтому я тоже безуспешно пытался это сделать.
Сейчас моя строка подключения Python выглядит как
db = sqlalchemy.create_engine(
unix_socket=/cloudsql/MYPROJECT:us-east1:MYSQLINSTANCE
sqlalchemy.engine.url.URL(
drivername='mysql+pymysql',
username=MYUSERNAME,
password=MYPASSWORD,
database=MYDATABASE,
query={
'unix_socket': '/cloudsql/{}'.format('MYPROJECT:us-east1:MYSQLINSTANCE')
}
),
pool_size=10,
max_overflow=2,
pool_timeout=30, # 30 seconds
pool_recycle=1800, # 30 minutes
)
И сейчас он говорит мне, что не может подключиться к экземпляру SQL на localhost, хотя я явно не пытаюсь подключиться на localhost.Я попытался соединиться с переменными среды, определенными в App.YAML, как определено в учебном пособии, а также изменил App.YAML на основе пары различных версий синтаксиса, которые я нашел в Интернете, но никакая комбинация на самом деле не работает.Так что сейчас я просто подключаю переменные непосредственно в свой main.py, который, как я знаю, менее безопасен.
Я также попытался сделать URL-адрес подключения длинным URL-адресом, например
db = sqlalchemy.create_engine(
unix_socket=/cloudsql/MYPROJECT:us-east1:MYSQLINSTANCE
sqlalchemy.engine.url.URL(mysql+pymysql://<db_user>:<db_pass>@/<db_name>?unix_socket=/cloudsql/<MYPROJECT>:us-east1:<MYSQLINSTANCE>
),
pool_size=10,
max_overflow=2,
pool_timeout=30, # 30 seconds
pool_recycle=1800, # 30 minutes
)
и это дает мне странную ошибку, которая выглядит как Не могу загрузить плагин: sqlalchemy.dialects: mysql.pymysql: // (тот URL, который я там ввел)
Я также посмотрел на подключение черезобщедоступный IP-адрес, указанный на странице SQL, но для этого требуется соединение в белый список, и я не уверен, с какого IP-адреса будет подключаться приложение Appengine.Несмотря на это, я не уверен, что лучший способ сделать это на данный момент, и любая помощь в установлении этой связи будет принята с благодарностью.Сейчас я просто бьюсь головой о стену.