OperationalError:“在读取初始通信数据包时丢失与MySQL服务器的连接”,系统错误:38“)

时间:2016-10-28 20:36:15

标签: python google-app-engine flask-sqlalchemy google-cloud-sql

我有一个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的应用程序,所以我不确定我是否在这里遗漏了一些内容......

1 个答案:

答案 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)