Python sqlite3查询生成

时间:2018-10-25 15:23:31

标签: python sqlite

具有以下条件:

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()函数将接受该查询,请帮忙-谢谢!

1 个答案:

答案 0 :(得分:0)

我不确定您要使用连接的第二条select语句要完成什么。第一行是您应该传递给cur.execute()的内容。例如:

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

这还可以防止SQL注入攻击,而这正是您自己想要利用的攻击。<​​/ p>

如果要执行drop语句等,则应使用cur.execute()自行处理,而不要像尝试的其他命令那样作为嵌入式命令使用。 / p>

实际上,我不知道您要如何完成此任务。这是在sqlite完成后的大致陈述。

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