pymysql一直报1064语法错误之execute问题

在使用pymysql时一开始报127.0.0.1 password:YES随即改为host='localhost',还是报127.0.0.1 password:YES一查mysql.user表里是没有root用户没有给127.0.0.1地址授权,localhost是有授权的,所以授权下就好了

1
2
3
4
# 这是创建用户有则无需添加
create user 'root'@'127.0.0.1' identified by 'password';
# 授权
GRANT ALTER,DELETE,INDEX,INSERT,SELECT,UPDATE ON allen.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'password';

随即就有爆出

pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version...........

1
2
3
4
## execute会对%s进行处理不要加引号
sql="select db,ip from %s where pingtai=%s and zone_id=%s"
## execute 可以防止sql注入,会把后面的参数处理后传递给%s
cursor.execute(sql,[game,pingtai,zone])

随之困扰的问题就来了一直语法错误,怎么看怎么没问题啊,看execute的 源代码,execute会把[]里边的每个参数都加上引号,可是mysql的表是不能加引号的啊,只能修改成:

1
2
sql="select db,ip from %s where pingtai='%s' and zone_id='%s'" %(game,pingtai,zone)
cursor.execute(sql)