当我们使用sql查询,或者修改sql 语句中,使用近似模糊查询,且带有 %s 用来连接字符串时,遇到ValueError:unsupported format character '?'
的错误,以下是原因和解决的方法:
1. 原因:
我们在执行cursor.execute(query)时,语句和参数之间,我们用 % 连接,但在python 中,%是连接字符串的,那就跟模糊查询中的 % 起冲突了 , 所以会出现 ‘%标’ 会出现不识别的情况,即unsupported format character。
如果只是select 查询,会遇到这种:
如果是执行修改UPDATE语句,可能会遇到这种:
这是因为我们修改的语句的,传入参数的内容里含有%,也会让sql的读取出现问题。
2.解决方法:
使用.replace('%', '%%%%')
,将查询语句中的“%”,替换成“%%%%”,让这个通配符成为字符串,sql就无法识别为模糊查询了。
result_json='{"title":"json在线解析%(简版) -%JSON在线解析"}'
UPDATE_SQL = f"UPDATE table_ SET status=1, data_='{json.dumps(result_json, ensure_ascii=False)}'".replace('%', '%%%%')
print('sql语句是:',UPDATE_SQL)#查看查询语句
engine.execute(UPDATE_SQL) #执行语句
关于sql查询中%的用法补充:
1、在SQL语句中一个% ,代表任意个字符
如 select * from emp where name like ‘K%’;
即表示查询 emp表中 以K开头姓名的数据;2、两个% 代表两段内容是任意的,
如 select * from emp where name like ‘%OK%’;
即表示查询emp 表中 姓名包含OK的数据
参考:https://zhidao.baidu.com/question/456476941.html