У меня есть запрос sqlite из внешнего источника, который будет иметь неизвестное количество предложений WHERE.Типов предложений будет ограничено (и я заранее знаю, какими они могут быть), но сколько из каждого типа неизвестно, пока я не получу запрос.
Я думал, что это будетлегко решить проблему, пока я на самом деле не доберусь до нее.
Я могу придумать пару возможных решений.Я мог бы указать длинный запрос SELECT с большим количеством различных предложений WHERE для каждого типа выбора и заполнить их с помощью 1=1
, когда недостаточно вариантов выбора, чтобы заполнить их все.Но это ужасный код, и он плохо реагирует, когда требуется больше места, чем указано.
Вместо этого я мог бы не делать это в чистом SQL, а вместо этого использовать рекурсивную функцию Python, которая выполняет итерации по запросам и последовательнофильтрует результаты.Это psuedocode, который не подходит для успешной работы:
queries = (list of queries from external source)
return filter_results(conn.cursor(), (database), queries)
def filter_results(cursor, results, queries):
if len(queries) == 0:
return results_so_far
cursor.execute("SELECT * FROM {} WHERE {}".format(results, queries.pop(0)))
results = cursor.fetchall()
return filter_results(cursor, results, queries)
Как вы можете заметить, я ошибся при передаче базы данных в функцию, и я хорошо знаю, что не будувозможность передать запрос SQL к результату cursor.fetchall()
.В какой-то момент я либо пытался эмулировать SQL в Python, либо подвергать себя SQL-инъекции.
Я либо слишком серьезно думаю об этом, либо пытаюсь решить неразрешимую проблему.Я очень подозреваю, что это первое.Какой правильный подход к этому?