2013-11-25 17 views
8

SA ha il supporto per le espressioni regolari ma quelli sembrano essere espressioni regolari Python (Regular expressions in SQLalchemy queries?)SQLAlchemy + PostgreSQL + PG regex

ho bisogno di usare espressioni regolari sulla corrispondenza alcune righe (una riga contiene 1 riga di log, quindi regex è un naturale partita), ma per motivi di prestazioni preferirei farlo utilizzando PG backend, come in this question:

select * from table where name ~ 'foo'; 

Come posso combinare entrambi regex PG-implementato e selezione degli oggetti SQLAlchemy in una query?

risposta

11

Il metodo filter() dell'oggetto Query consente di utilizzare SQL raw per il filtro. Quindi, si potrebbe fare ...

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

Si noti che se si desidera fornire questo come un argomento, è possibile utilizzare text() e ...

from sqlalchemy.sql import text 

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

Perché noi definiamo il "reg" bind parametro nel filtro utilizzando text(), dobbiamo assicurarci di definire il valore, che possiamo fare usando params().

+0

Grazie !! Questa cosa con i parametri di bind è anche molto utile (protezione contro l'iniezione sql e simili). – LetMeSOThat4U

7

Si noti che è anche possibile utilizzare il supporto operatore infisso:

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