使用sqlalchemy或者pymysql执行原始sql语句时可能会遇到一些问题
- VALUE中存在特殊字符,如引号、反斜杠等等
>>> import pymysql
>>> pymysql.escape_string("'")
"\\'"
所以可以在构建sql语句中进行转换:
data = 'AND '.join(
"`{}`='{}'".format(pymysql.escape_string(key), pymysql.escape_string(value)) \
if type(value) == str else "`{}`={}".format(key, value) \
for key, value in kwargs.items()
)
参考:
https://stackoverflow.com/a/3617097/7151777
https://stackoverflow.com/a/2561254/7151777
- VALUE中存在百分号%
这个字符的问题和上面的不太一样,这个是由python语法引起的,%是格式化字符串的标记字符,所以用上面的escape_string()方法并不能转换,需要替换一下
>>> values = values.replace('%', '%%')
参考:https://stackoverflow.com/a/11696152/7151777
2021-03-11
pymysql >= 1.0.0接口发生变化
# v1.0.0及以上
from pymysql.converters import escape_string
# v0.10.1及以下
from pymysql import escape_string