繁体   English   中英

Python sqlite3 查询生成

[英]Python sqlite3 query generation

具有以下:

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=')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM