Подтвердить что ты не робот

SQLAlchemy запрос, в котором столбец содержит подстроку

Я создаю запрос с использованием SQLAlchemy и SQLite3, в котором я хотел бы выбрать строки, в которых столбец String содержит определенную подстроку. Каков наилучший способ сделать это?

4b9b3361

Ответ 1

Фильтр db.table.column.like('%needle%'). Существует также ilike для нечувствительного к регистру поиска.

Для интерфейса fancier вы можете разрешить известные подстановочные знаки "dir".

if '*' in needle or '_' in needle: 
    looking_for = needle.replace('_', '__')\
                        .replace('*', '%')\
                        .replace('?', '_')
else:
    looking_for = '%{0}%'.format(needle)

result = db.table.filter(db.table.column.ilike(looking_for))

Примечания:

  • db.table.filter и db.table.column для SQLSoup (SQLSoup полезно, если база данных была сделана другим приложением)
  • для ядра SQLAlchemy Core select(column_list).where(table.c.column.ilike(expr)). Этот интерфейс - это путь, когда вам нужна вся мощь из необработанного SQL, без необходимости составлять инструкции вручную, используя строчную интерполяцию (используйте его по SQLSoup для самоанализа, поэтому вам не нужно объявлять таблицы)
  • для SQLAlchemy Declarative (тот, который используется в Flask), это Model.query.filter(Model.field.ilike(expr))

Ответ 2

Попробуйте это

Model.query.filter(Model.columnName.contains('sub_string'))

Ответ 3

Пока table.c.column.like("%...%") должен работать, есть более прямой способ сказать, что вы хотите:

table.c.column.contains("needle")

Обычно это генерирует тот же SQL-запрос, но лучше читать для непосвященных. Заметьте, что содержит, кажется, не сбегает "_" и "%" .