OperationalError: "Lost connection to MySQL server at 'reading initial communication packet', system error: 38")

OperationalError: "Lost connection to MySQL server at 'reading initial communication packet', system error: 38")

我有一个 GAE 应用程序设置并使用 Google 云 SQL 实例授权,但我似乎无法摆脱这个错误:

操作错误:(_mysql_exceptions.OperationalError) (2013, "Lost connection to MySQL server at 'reading initial communication packet', system error: 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 的第一个应用程序,所以我不确定我是否遗漏了什么...

万一其他人有这个问题,我想出了问题。事实证明 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)