Как работать с символами (*, +, ~, ...) в sqlalchemy в приложении фляги - PullRequest
0 голосов
/ 21 января 2019

У меня работает полная веб-страница, и теперь я отлаживаю ошибки. До сих пор я не могу избавиться от единственного, когда на моей веб-странице вводится символ (+, *, ~, ...)

Если я изменяю оператор: op ('~ *') для like, он работает, но мне не нужен оператор like, мне нужен op без учета регистра ('~ *')

# first, i take from my web the filter that an user have introduced
filter_tag = str(request.form.get('filter_tag'))
if take_filter.filter_tag != '':
    conditions.append(clothes.c.column_tag==filter_tag)

query = session.query(clothes).filter(and_(*conditions),).distinct(clothes.c.nummer).order_by(clothes.c.nummer)

Он отлично работает с обычным текстом, но если пользователь вводит знак (*, ~, +, ...), он возвращает ошибку:

sqlalchemy.exc.DataError: (psycopg2.DataError) недопустимое регулярное выражение: операнд квантификатора недействителен

1 Ответ

0 голосов
/ 22 января 2019

Я понял, как это сделать, основываясь на этом посте: Без учета регистра с оператором равенства , главное отличие в том, что мне нужно проверить, содержит ли значение столбца строку, а с другойpost является равным отношением (==).

Для этого я изменил фильтрацию с op ('~ *') на содержащую.Но содержит работы, чувствительные к регистру, и чтобы исправить это, я просто добавляю более низкую функцию.

#import the upper and lower function from sqlalchemy
from sqlalchemy import func

#take the filter from browser
filter_tag = str(request.form.get('filter_tag'))

#Check that the filter is not empty
if take_filter.filter_tag != '':
    conditions.append(func.lower(clothes.c.column_tag).contains(func.lower(filter_tag)))

query = session.query(clothes).filter(and_(*conditions)).distinct(clothes.c.nummer).order_by(clothes.c.nummer)
...