我不太了解 Quoble 及其接受的 SQL 方言,而且您可能要处理的数据类型范围很广。但在许多情况下,将参数转换为字符串,然后通过将单引号字符加倍或在它们前面加上反斜杠(例如,MySQL 允许这两种方法)来转义单引号字符,这可能是您能做的最好的事情。我将%s
用作您的伪准备语句的占位符:
from datetime import date
def format_sql(query, args):
new_args = []
for arg in args:
new_args.append(str(arg).replace("'", "''"))
return query.replace("%s", "'%s'") % tuple(new_args)
print(format_sql("insert into mytable(x, y, z) values(%s, %s, %s)", ("Booboo's car", date.today(), 2)))
印刷:
insert into mytable(x, y, z) values('Booboo''s car', '2021-01-04', '2')
如果有任何可能%s
出现在您的 SQL 中而不是作为占位符的某些上下文中,那么您需要将单引号放在那些实际占位符并且没有函数format_sql
执行该功能的事件周围:
from datetime import date
def format_sql(query, args):
new_args = []
for arg in args:
new_args.append(str(arg).replace("'", "''"))
return query % tuple(new_args)
print(format_sql("insert into mytable(x, y, z) values('%s', '%s', '%s')", ("Booboo's car", date.today(), 2)))