使用sqlalchemy或者pymysql执行原始sql value中存在特殊字符的解决办法

使用sqlalchemy或者pymysql执行原始sql语句时可能会遇到一些问题

  1. 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

  1. 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

参考:https://blog.csdn.net/COCO56/article/details/107430933

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值