我使用的是python3.8和mysql.connector。是否可以参数化包含LIKE子句并传入active %通配符的查询?
要驯服我尝试过的传入模式:
pattern = re.sub(r'%+', '%', target)
~and~
pattern = re.sub(r'%+', '%%', target)
~and~
pattern = re.sub(r'%+', '\\%', target)对于我尝试过的查询:
cursor.execute(f"""
DELETE FROM thnigs
WHERE user = %(user)s
AND widget LIKE %(pattern)s
""", dict(user=username, pattern=pattern))
cursor.execute(f"""
DELETE FROM thnigs
WHERE user = %s
AND widget LIKE %s
""", (username, pattern))实际上,pattern几乎可以包含任何内容。我知道mysql.connector将对输入进行转义,但是如果输入字符串包含任意数量的百分号,那么查询就会挂起,并以:1205 (HY000): Lock wait timeout exceeded; try restarting transaction结束
我尝试切换RLIKES的LIKES,并将通配符更改为简单的.*字符串,结果相同--如果有任何活动的通配符,则查询终止。
到目前为止还没有起作用的值:
pattern = "%red"
pattern = "red%"如果这是不可能的,那么我想我可以拉入所有的值,并在应用程序中本地执行通配符搜索,但这感觉是错误的。可能的数据集可能会变得很大。
有没有正确或更好的方法?
**编辑**添加了另一个我尝试过的%替换模式
发布于 2020-07-21 05:48:06
https://stackoverflow.com/questions/63004189
复制相似问题