2016-11-20 2 views
0

Предполагая, что у нас есть таблица, состоящая из столбцов_1, column_2, ..., column_n, и все они являются строковыми полями. Условия, которые мы будем делать без учета регистра, сохраняются в словаре d, например d [column_1] = «Hello», который может содержать или не содержать все столбцы. Как мы можем выполнить запрос?SQLAlchemy и многоколоночный регистр без учета регистра

Я проверил вопрос Case Insensitive Flask-SQLAlchemy Query. Он содержит много потрясающих ответов, но никто из них не работает, если мы не знаем, какие условия у нас есть до выполнения.

ответ

1

Вам понадобится построить цикл запроса через каждую клавишу словаря.

Как вы не дали пример кода, я буду называть табличная модель класса TableModel и каждый столбец будет column_1, column_2 и т.д.

Что-то, как это должно работать:

d = {'column_1': 'some_string', 'column_3': 'another_string'} 
# skipping 'column_2' just to exemplify how every column is optional in the dictionary 

my_query = TableModel.query 

for k in d: 
    my_query = my_query.filter(getattr(TableModel, k).ilike(d[k])) 

И это все. Впоследствии вы можете использовать my_query как и любой другой запрос, например, my_query.count() или my_query.all()

+1

Вы должны использовать 'getattr (TableModel, k)' вместо 'eval'. – dirn

+0

Согласен, ответ обновлен. – AArias

+0

Он работает! Спасибо! –

Смежные вопросы