Я создаю запрос с использованием SQLAlchemy и SQLite3, в котором я хотел бы выбрать строки, в которых столбец String содержит определенную подстроку. Каков наилучший способ сделать это?
SQLAlchemy запрос, в котором столбец содержит подстроку
Ответ 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-запрос, но лучше читать для непосвященных. Заметьте, что содержит, кажется, не сбегает "_" и "%" .