Python3 Sqlite3 - 如何正确转义executioncript?

问题描述 投票:0回答:2

我有这样的查询:

PRAGMA encoding="UTF-8";
INSERT OR IGNORE INTO {0} ({1}) VALUES ({2});
UPDATE {0} SET {1} = "{2}" WHERE {1} = "{3}";

我使用此查询来插入和更新。但是,正如您所看到的,这是一个多行查询,所以我必须使用executioncript函数,这导致我不能使用这样的占位符来避免注入:

PRAGMA encoding="UTF-8";
INSERT OR IGNORE INTO {0} ({1}) VALUES (?);
UPDATE {0} SET {1} = "?" WHERE {1} = "?";

那么,有解决方法吗?我是否必须改变我的方法或不使用占位符来逃避它?如果是这样,我怎么逃避它以避免可能的注射?谢谢。

python python-3.x sqlite
2个回答
0
投票

您可以使用字符串格式。

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

0
投票

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

然后在INSERT和UPDATE语句中,只使用正常的占位符。 (不幸的是,没有办法使用占位符来指示表或列名,只是值,所以如果在写出查询时不知道那些,你必须坚持使用字符串格式化方法。)

© www.soinside.com 2019 - 2024. All rights reserved.