Ответ 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))