这两天遇到一个问题,自己做的程序模块,之前运行的好好的,突然报错,运行不了了。
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' ([Errno -8] Servname not supported for ai_socktype)")
上面是返回来的错误
最开始以为是mysql的问题,因为之前代码是可以运行的,近期也没有改动。只有PHP那边动过,所以怀疑是php那边的问题。php那边整了好久,问题都没有解决。
后来还是同事帮忙找出了问题,原来是调接口时参数顺序有问题,哭晕在厕所。。。。
import pymysql
from settings import logger
import settings
def read_from_mysql(EnterpriseID):
host = settings.mysql_host
user = settings.mysql_user
password = settings.mysql_password
port = settings.mysql_port
dbname='co' + EnterpriseID
db = pymysql.connect(host,user, password,port, dbname, charset='utf8')
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
cursor.execute("ALTER DATABASE `%s` CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci'" % dbname)
try:
sql = "select name,conform_words from c_conform_words where is_delete = 0"
cursor.execute(sql)
date = cursor.fetchall()
finally:
db.close()
return date
问题就出在这一行,把port放在了daname前面
db = pymysql.connect(host,user, password,port, dbname, charset='utf8')
找到的connecting函数的源码
更改方案1:按函数顺序给值
db = pymysql.connect(host,user, password, dbname,port charset='utf8')
更改方案2:将实参赋值给形参,这样就不用管顺序了
db = pymysql.connect(host = host,user = user, password = password,port = port, database = dbname, charset='utf8')