2013-11-25 4 views
8

SA имеет поддержку регулярных выражений, но те, кажется, Python регэксп (Regular expressions in SQLalchemy queries?)SQLAlchemy + PostgreSQL + PG REGEX

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

select * from table where name ~ 'foo'; 

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

ответ

11

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

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

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

from sqlalchemy.sql import text 

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

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

+0

Вы !! Эта вещь с параметрами связывания также очень полезна (защита от SQL-инъекций и т. П.). – LetMeSOThat4U

7

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

session.query(Table).filter(Table.name.op("~")('foo')) 
Смежные вопросы