2012-01-12 4 views
0

開発サーバーでicontainsを使用していくつかの奇妙な動作が発生しています。私はいくつかの奇妙な結果(期待数ではない)を返す複雑なクエリを持っています。私は掘り下げて、問題がicontainsであると思われることを発見しました。開発時のDjangoの奇妙なアイコンの振る舞い

mysql> select * from species where en_name RLIKE 'tortoise'; 
+-------+----------------------------------+ 
| id | en_name       | 
+-------+----------------------------------+ 
| 16215 | Santa Cruz Galapagos Tortoise | 
| 16214 | Floreana Galapagos Tortoise  | 
| 16213 | Volcan Darwin Galapagos Tortoise | 
| 16211 | Sierra Negra Galapagos Tortoise | 
| 16210 | Pinzon Galapagos Tortoise  | 
| 16209 | Santiago Galapagos Tortoise  | 
| 738 | River Tortoise     | 
| 16207 | Volcan Wolf Galapagos Tortoise | 
| 16206 | Pinta Galapagos Tortoise   | 
| 16216 | Fernandina Galapagos Tortoise | 
| 16217 | Santa Fe Galapagos Tortoise  | 
| 16218 | Alcedo Galapagos Tortoise  | 
| 16219 | Cerro Azul Galapagos Tortoise | 
| 16220 | Rabida Galapagos Tortoise  | 
+-------+----------------------------------+ 
14 rows in set (0.00 sec) 

私はDjangoのシェルにドロップし、実行します:

query_set = Species.objects.filter(en_name__icontains='tortoise') 

私が手

まず第一には、ここで私はジャンゴで実行するクエリの一部のMySQLの出力であります1つの結果:

>>> for i in query_set: 
...  print i.en_name 
...  
River Tortoise 

私は、それは、空白の数と関係があると思います。 en_name文字列(川の亀には1つしかないが、他のものには1以上がある)。私はまた、icontainsが開発と生産において異なった動作をすると聞いています。

誰もがこれにいくつかの光を当てることができますか?

+0

実行されRLIKE、何をしたい場合:>>>印刷query_set.query – Ted

+0

以上であるBeacuseをちょうど例です。私がprint_set.queryを実行すると、私は実際のデータセットにたくさんの結合を取得します。しかし、インポート部分は '... WHERE' mytable'.'en_name' LIKE%tortoise% 'と出てきます。それはRLIKEではありませんか? –

+0

ILIKEの代わりにLIKEを取得する方法がわかりませんが、探しているRLIKEの動作を取得する方法についての私の回答を参照してください – Ted

答えて