SA имеет поддержку регулярных выражений, но это похоже на регулярные выражения Python (Регулярные выражения в запросах SQLalchemy?)
Мне нужно использовать регулярное выражение для соответствия некоторым строкам (строка содержит 1 строку журнала, поэтому регулярное выражение является естественным совпадением), но по соображениям производительности я бы предпочел сделать это с использованием бэкэнда PG, например, в этот вопрос:
select * from table where name ~ 'foo';
Как я могу объединить оба объекта PG-regex AND SQLAlchemy в одном запросе?
Метод 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()
.
Обратите внимание, что вы также можете использовать поддержку оператора infix:
session.query(Table).filter(Table.name.op("~")('foo'))