2013-11-25 21 views
8

SA regexes desteği vardır regex ancak bu Python regexpleri (Regular expressions in SQLalchemy queries?)SQLAlchemy + PostgreSQL + PG

bazı satırları eşleşen üzerinde düzenli ifade kullanmak gerekir

(bir satır 1 günlük satırı içerir, bu nedenle regex doğal olduğunu görünmektedir maç) ama this question olduğu gibi PG arka plan sistemini kullanarak bunu yapmak için tercih ediyorum performans nedenleriyle:

select * from table where name ~ 'foo'; 

nasıl bir sorguda hem PG-uygulanan regex VE SQLAlchemy nesne seçimini birleştirebilirsiniz?

cevap

11

Sorgu nesnesinin filter() yöntemi, filtre için ham SQL kullanmanıza izin verir. Biz "reg" define Çünkü Yani, bağımsız değişken olarak bu sağlamak istiyorsanız, text() ve kullanabileceği

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

Not ...

from sqlalchemy.sql import text 

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

... yapabileceğini text() kullanarak filtrede parametre bağlama, params() kullanarak yapabileceğimiz değeri tanımladığımızdan emin olmalıyız. Ayrıca infix operatör desteği kullanabilirsiniz

+0

teşekkür ederiz !! Bağlama parametreli bu şey de çok kullanışlıdır (sql enjeksiyonuna ve benzerine karşı koruma). – LetMeSOThat4U

7

Not:

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