无法使用 PyMySQL 连接到云 SQL



我正在尝试从Python应用程序(使用PymySQL 0.7.9)连接到Google App Engine上的cloud SQL。

我的连接字符串看起来像这样(凭据是假的):

pymysql.connect(unix_socket='/cloudsql/gae_project_name:cloudsql_instance_name', 
                user='user', password='', db='database_name')

我收到的错误消息是:

OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 97] Address family not supported by protocol)")

就像pymysql不认识我正在尝试通过UNIX插座连接并尝试使用主机参数的默认值(我认为是localhost

我能够通过相同的连接字符串与mySQLDB连接。

为什么不使用mysqldb?

我只是在使用Pymysql部署烧瓶应用程序的情况下也遇到了相同的问题,我尝试了很多修复程序而没有成功。我的解决方法是使用mysqldb而不是aha ..!

我使用python3 flex应用引擎和pymysql进行了连接。

这是我的app.yaml的样子:

runtime: python
env: flex
entrypoint: gunicorn -b :$PORT api:app --timeout 180
runtime_config:
  python_version: 3
env_variables:
  SQLALCHEMY_DATABASE_URI: >-
    mysql+pymysql://user:password@/database?unix_socket=/cloudsql/project-name:us-central1:instance-name
beta_settings:
  cloud_sql_instances: us-central1:instance-name
# This sample incurs costs to run on the App Engine flexible environment. 
# The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/python/configuring-your-app-with-app-yaml
manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

确保在env_variables和beta_settings中替换用户,密码,数据库和实例连接。

这是我的python:

import pymysql.cursors
import pymysql
connection = pymysql.connect(unix_socket='/cloudsql/project-name:us-central1:instance-name',
        user='user',
        password='password',
        db='database',
        charset='utf8mb4',
        cursorclass=pymysql.cursors.DictCursor)

显然,pymysql当前不受Google App Engine Standard环境的支持,该标准环境仅运行Python 2.7(截至2018年6月)。这是来自GCP Python项目的维护者:

我可以确认python27运行时不支持pymysql。但是,在大多数用例中,可以通过尝试使用try:/dy Infrorror:有条件地导入一个或另一个。当它们共享相同的接口时,您可以使用导入来使两个不同的库共享相同的名称,以便于您的代码易用。

有关详细信息,请参见此GitHub线程

相关内容

  • 没有找到相关文章

最新更新