为了账号安全,请及时绑定邮箱和手机立即绑定

Python3 Sqlite3 - 如何正确转义executescript?

Python3 Sqlite3 - 如何正确转义executescript?

守着一只汪 2021-06-06 11:05:39
我有一个这样的查询:PRAGMA encoding="UTF-8";INSERT OR IGNORE INTO {0} ({1}) VALUES ({2});UPDATE {0} SET {1} = "{2}" WHERE {1} = "{3}";我使用此查询来插入和更新。但是,正如您所看到的,这是一个多行查询,因此我必须使用 executescript 函数,这导致我无法使用这样的占位符来避免注入:PRAGMA encoding="UTF-8";INSERT OR IGNORE INTO {0} ({1}) VALUES (?);UPDATE {0} SET {1} = "?" WHERE {1} = "?";那么,有解决方法吗?我是否必须改变我的方法或在不使用占位符的情况下转义它?如果是这样,我如何逃避它以避免可能的注射?谢谢。
查看完整描述

2 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

您可以使用字符串格式。


command = """

PRAGMA encoding="UTF-8";

INSERT OR IGNORE INTO {0} ({1}) VALUES (?);

UPDATE {0} SET {1} = {} WHERE {1} = {};

""".format(var1, var2)


查看完整回答
反对 回复 2021-06-09
?
浮云间

TA贡献1829条经验 获得超4个赞

摆脱那个 pragma。它仅在在全新数据库中创建任何表之前使用时才有意义。文档

然后在你的 INSERT 和 UPDATE 语句中,像往常一样使用占位符。(不幸的是,无法使用占位符来指示表名或列名,只能使用值,因此如果在编写查询时不知道这些值,则必须为它们坚持使用字符串格式设置方法。)


查看完整回答
反对 回复 2021-06-09
  • 2 回答
  • 0 关注
  • 337 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信