Python3 Sqlite3-如何正确地逃避执行脚本?

时间:2018-09-03 18:42:04

标签: python python-3.x sqlite

我有这样的查询:

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 个答案:

答案 0 :(得分:0)

您可以使用字符串格式。

command = """
PRAGMA encoding="UTF-8";
INSERT OR IGNORE INTO {0} ({1}) VALUES (?);
UPDATE {0} SET {1} = {} WHERE {1} = {};
""".format(var1, var2)

答案 1 :(得分:0)

摆脱这种杂念。它仅在在全新数据库中创建任何表之前使用时才有意义。 Documentation

然后在INSERT和UPDATE语句中,仅使用常规的占位符即可。 (不幸的是,无法使用占位符来表示表或列的名称,而只能使用值,因此,如果在编写查询时不知道占位符,则必须坚持使用字符串格式化方法。)< / p>