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

本文探讨了使用pymysql执行SQL语句时如何处理特殊字符,包括引号、反斜杠和百分号,提供了具体的代码示例和不同版本的pymysql库中escape_string函数的调用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用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.youkuaiyun.com/COCO56/article/details/107430933

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值