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))
Запрос SQLAlchemy, в котором столбец содержит подстроку