2013-11-25 21 views
8

SAは、正規表現をサポートしているが、これらは私はいくつかの行の一致に正規表現を使用する必要がPythonの正規表現(Regular expressions in SQLalchemy queries?SQLAlchemyの+のPostgreSQL + PG正規表現

ように見える(行1本のログ・ラインを含んでいるので、正規表現は自然です試合)が、パフォーマンス上の理由から、私はthis questionのように、PGのバックエンドを使用してそれを行うことを好むだろう:

select * from table where name ~ 'foo'; 

私は1つのクエリでPG-実装正規表現とSQLAlchemyのオブジェクト選択の両方を組み合わせることができますどのように?

答えて

11

Queryオブジェクトのfilter()メソッドを使用すると、フィルタに生のSQLを使用できます。私たちは「REG」を定義するのでだから、あなたは、引数としてこれを提供したい場合は、あなたがtext()とを使用できることを

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

注...

from sqlalchemy.sql import text 

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

...行うことができますtext()を使用してフィルタのバインドパラメータを設定する場合は、値を定義する必要があります。params()を使用して値を定義する必要があります。

+0

ありがとうございました!!バインドパラメータを持つこのことも非常に便利です(SQLインジェクションなどに対する保護)。 – LetMeSOThat4U

7

あなたも中置演算子のサポートを使用することができます注:

session.query(Table).filter(Table.name.op("~")('foo')) 
関連する問題