2016-09-30 2 views
2

正規表現を渡しているときに、Django ORMでPostgreSQL正規表現検索を行う方法を理解しています。正規表現がデータベーステーブルにあり、その文字列を渡しているときに相当するのは何ですか?正規表現がデータベースにあり、その値が文字列の場合、Django ORM Postgresql正規表現を使用してください。

たとえば、以下のPostgreSQLとDjangoのORMのクエリは同等です:

INSERT INTO StringValues (val) VALUES ('abc'); 

SELECT * FROM StringValues WHERE val ~* '^[a-z]{3}$'; 

# is the same as 

StringValues.objects.filter(val__regex=r'^[a-z]{3}$') 

あなたはジャンゴで次のクエリを行うことができますどのように?

INSERT INTO StringValues (val) VALUES ('^[a-z]{3}$'); 

SELECT * FROM StringValues WHERE 'abc' ~* val; 

I.E.正規表現はテーブルの中にあり、私は自分の文字列と一致する行が必要です。

私の具体的なケースでは、パフォーマンスは問題ありません。おそらく100行未満が比較されますが、すべての正規表現のコンパイルが本当に悪い考えであれば、このパフォーマンスのコメントも歓迎です。

+0

私はあなたがこのソリューションを探していると信じて:https://stackoverflow.com/a/31689831/1971587 –

+0

まさに - 謝罪、私は受け入れ答えとして、以下の私の答えをマークし忘れてい。 – Chris

答えて

0
StringValues.objects.extra(where=["'abc' ~ val"])