2013-11-25 12 views
8

SA Unterstützung für reguläre Ausdrücke hat aber diejenigen scheinen Python regexps (Regular expressions in SQLalchemy queries?)SQLAlchemy + PostgreSQL + PG regex

I regex verwenden müssen, um einige Zeilen auf dem Zusammenbringen (a Zeile enthält 1 log Zeile, so regex ist eine natürliche Spiel), aber aus Leistungsgründen würde ich es PG Backend bevorzugen, wie in this question:

select * from table where name ~ 'foo'; 

Wie kann ich sowohl PG-implementiertes regex kombinieren UND SQLAlchemy Objektauswahl in einer Abfrage?

Antwort

11

Die Methode des Query-Objekts ermöglicht die Verwendung von Raw-SQL für den Filter. So konnten Sie tun ...

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

Beachten Sie, dass, wenn Sie dies als Argument zur Verfügung stellen möchten, können Sie text() und verwenden können ...

from sqlalchemy.sql import text 

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

Weil wir die "reg" definieren bind Parameter im Filter mit text(), müssen wir sicherstellen, dass wir den Wert definieren, was wir tun können mit params().

+0

Thank you !! Diese Sache mit Bindungsparametern ist ebenfalls sehr nützlich (Schutz gegen SQL-Injektion und dergleichen). – LetMeSOThat4U

7

Beachten Sie, dass Sie auch die Infixoperator Unterstützung verwenden können:

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