Python sqlite3查询生成



具有以下内容:

array = ['', 'kujawski=', "'", "select * from symbols where name = '='", ';drop table;', 'fakeone=']

我可以生成以下查询:

//(query, array)
('select count(*) from symbols where  name in (?,?,?,?,?,?)', ('', 'kujawski=', "'", "select * from symbols where name = '='", ';drop table;', 'fakeone='))

生成查询,我可以将其放入cursor.execute((函数中,目前我正在通过以下代码来完成:

"select count(*) from table where name in (%s)" % ",".join("?"*len(array)),array

而cursor.execute((函数返回所需的输出。然而,问题是当我想用AND过滤查询时,例如:

select count(*) from table where name in (...) and column5 in (...)

我不知道如何在python中生成查询,哪个cursor.execute((函数会接受它,请帮助-谢谢!

我不确定您要用带有联接的第二个select语句实现什么。第一行是应该传递给cur.execute()的内容。例如:

`cur.execute(
'select count(*) from symbols where  name in (?,?,?,?,?,?)',
('', 'kujawski=', "'", "select * from symbols where name = '='", ';drop table symbols;', 'fakeone=')
)`

这也将防止SQL注入攻击,而这正是您自己试图利用的。

如果您想执行drop语句等,那么您应该使用cur.execute()来单独处理它,而不是像您尝试的那样作为另一个命令中的嵌入命令。

事实上,我完全不知道你想用这个来实现什么。这是sqlite完成后的声明(大致(。

select
count(*)
from
symbols
where
name in (
'',
'kujawski=',
"'",
"select * from symbols where name = '='",
';drop table symbols;',
'fakeone=')

最新更新