@VSCO_FOX

Python SQLite как правильно сделать выборку?

Есть функция, которая принимает несколько необязательных параметров, условно:

def get_data(a=-1, b=-1, c=-1, d=-1):
    pass


Структура SQL таблицы:
id: INT, a: INT, b: INT, c: INT, d:INT
Все числа больше нуля

Нужно получить из таблицы все строки, в которых значения столбцов равны значению передаваемых в функцию параметров.

Важно: если не передать в функцию какой-либо параметр, т.е. этот параметр равен -1, то значения этого параметра при поиске не должно учитываться.

def get_data(a=-1, b=-1, c=-1, d=-1):
    '''
    Выборка должна выполняться только по тем параметрам,
    которые были переданы в функцию!
    '''

    data = cursor.execute('SELECT * FROM `table` WHERE ...').fetchall()
  • Вопрос задан
  • 202 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Хранишь отдельно строку запроса и отдельно список значений.
Инициализируешь строку запроса SELECT * FROM table WHERE (1 = 1) - тогда у тебя будет корректный запрос и при наличии, и при отсутствии параметров.
Затем для каждого параметра проверяешь, если он был передан - к строке запроса добавляешь f'AND ({paramname} = ?)' (где paramname это имя параметра), а в список значений добавляешь в конце значение этого параметра. Если не передан - не делаешь ничего.
Тогда у тебя в конце будет строка вида
SELECT * FROM table WHERE (1 = 1) AND (b = ?) AND (c = ?)
, и к ней список значений, которые sqlite должна будет подставить вместо ?. Читай документацию на метод execute(), как это сделать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы