我正在尝试从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线程