赞
踩
想将反斜线结尾的字符串插入数据库。代码片段:
s = 'abc\\'
# 报错 pymysql.err.ProgrammingError:(1064, ...
sql1 = "insert into test(name) values ('{}')".format(s)
# sql1 = "insert into test(name) values ('abc\\')"
cursor.execute(sql)
# 正确执行(repr的结果总是以单引号包围)
sql2 = "insert into test(name) values ({})".format(repr(s))
# sql2 = "insert into test(name) values ('abc\\\\')"
cursor.execute(sql)
# 正确执行
sql3 = "insert into test(name) values (%s)"
# pymysql内部会把sql3处理为上面sql2的格式
cursor.execute(sql, s)
sql1是直接在MySQL控制台可以成功执行。
pymysql的execute在执行sql的过程中,会先把转义字符解析一层,然后再转给MySQL(把sql2转为sql1的状态)。
所以传给execute的sql语句需要在可执行的sql上额外再加一层转义。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。