SQLAlchemy + PostgreSQL + PG регулярное выражение

8

SA имеет поддержку регулярных выражений, но это похоже на регулярные выражения Python (Регулярные выражения в запросах SQLalchemy?)

Мне нужно использовать регулярное выражение для соответствия некоторым строкам (строка содержит 1 строку журнала, поэтому регулярное выражение является естественным совпадением), но по соображениям производительности я бы предпочел сделать это с использованием бэкэнда PG, например, в этот вопрос:

select * from table where name ~ 'foo';

Как я могу объединить оба объекта PG-regex AND SQLAlchemy в одном запросе?

Теги:
sqlalchemy

2 ответа

11
Лучший ответ

Метод filter() объекта Query позволяет использовать исходный SQL для фильтра. Итак, вы могли бы сделать...

Table.query.filter("name ~ 'foo'")

Обратите внимание, что если вы хотите предоставить это как аргумент, вы можете использовать text() и params()...

from sqlalchemy.sql import text

Table.query.filter(text('name ~ :reg')).params(reg='foo')

Поскольку мы определяем параметр привязки "reg" в фильтре с помощью text(), нам нужно убедиться, что мы определяем значение, которое мы можем сделать, используя params().

  • 0
    Спасибо!! Эта вещь с параметрами связывания также очень полезна (защита от SQL-инъекций и тому подобное).
7

Обратите внимание, что вы также можете использовать поддержку оператора infix:

session.query(Table).filter(Table.name.op("~")('foo'))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню