python写数据到mysql时发生的1064错误

python写数据到mysql时发生的1064错误(web2py)


错误原因是单双引号引起的

# 发生错误代码,使用pymysql
dt = [{'name': "i'am i'll fine", 'age': 13}, {'name': 'you"are welcome"', 'age': 12}]
sql = """insert into test.users (name,age) values('%s',%s)""" % (i['name'],i['age'])
db.execute(sql) # 1064错误

解决办法有几种,可解决大部分问题

# 使用escape_string,转换含有单双引号的值
dt = [{'name': "i'am i'll fine", 'age': 13}, {'name': 'you"are welcome"', 'age': 12}]
sql = """insert into test.users (name,age) values('%s',%s)""" % (pymysql.escape_string(i['name']),i['age'])
db.execute(sql) # 通过
# 同理的办法,双引号不用管
i['name'].replace("'","\\'")

而自己用的环境是web2py这个框架中,pymysql被封装在DAL中,以上方法并不能解决问题,搜索博文,尝试可以这样解决

# 使用以下语法可以解决
dt = [{'name': "i'am i'll fine", 'age': 13}, {'name': 'you"are welcome"', 'age': 12}] 
for i in dt:
    sql = "INSERT INTO {0} SET {1}"\
    .format('users',','.join(['{0}={1!r}'.format(k, str(v)) for (k, v) in i.items()]))
    db.executesql(sql)

详细可以参考原文:原博文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值