当前位置:   article > 正文

python写数据到mysql时发生的1064错误_错误代码: 1064 use_cancel

错误代码: 1064 use_cancel

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错误
  • 1
  • 2
  • 3
  • 4

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

# 使用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("'","\\'")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

而自己用的环境是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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/508944
推荐阅读
相关标签
  

闽ICP备14008679号