Python sqlite3 генерация запросов - PullRequest
0 голосов
/ 25 октября 2018

Имея следующее:

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 голосов
/ 25 октября 2018

Я не уверен, чего вы пытаетесь достичь с помощью своего второго 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=')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...