我有一个GAE应用程序设置并使用Google Cloud SQL实例授权,但我似乎无法摆脱此错误:
OperationalError:(_ mysql_exceptions.OperationalError)(2013年,“在'读取初始通信数据包时失去与MySQL服务器的连接',系统错误:38”)
我正在使用Python27和Flask-SQLAlchemy连接到数据库。这是数据库信息:
config.py
CLOUDSQL_DB_NAME = 'db-name'
GAE_PROJECT_ID = 'project-id'
CLOUDSQL_INSTANCE_NAME = 'instance-name'
SQLALCHEMY_DATABASE_URI = 'mysql+mysqldb://root@/{db_name}?unix_socket=/cloudsql/{project_id}:{instance_name}'.format(db_name = CLOUDSQL_DB_NAME,
project_id = GAE_PROJECT_ID,
instance_name = CLOUDSQL_INSTANCE_NAME)
的app.yaml
libraries:
- name: MySQLdb
version: latest
- name: jinja2
version: 2.6
# [START env_variables]
env_variables:
CLOUDSQL_CONNECTION_NAME: connection-name
CLOUDSQL_USER: root
CLOUDSQL_PASSWORD: password
# [END env_variables]
这是我第一个在GAE上使用Flask的应用程序,所以我不确定我是否在这里遗漏了一些内容......
答案 0 :(得分:0)
如果其他人有这个问题,我想出了问题。事实证明URI的文档稍微不完整,因为我使用的是Flask而不是Webapp2,而且我缺少一些属性。
这是解决问题的正确 config.py :
# Google Cloud SQL information
CLOUDSQL_USER = 'root'
CLOUDSQL_PASSWORD = '********'
CLOUDSQL_DB_NAME = 'db-name'
GAE_PROJECT_ID = 'project-name'
CLOUDSQL_CONNECTION_NAME = 'connection-name'
SQLALCHEMY_DATABASE_URI = (
'mysql+mysqldb://{user}:{password}@localhost/{database}'
'?unix_socket=/cloudsql/{connection_name}').format(
user=CLOUDSQL_USER, password=CLOUDSQL_PASSWORD,
database=CLOUDSQL_DB_NAME, connection_name=CLOUDSQL_CONNECTION_NAME)