Django在开发中的奇怪icontains行为
我在我的开发服务器上使用icontains
时出现了一些奇怪的行为。 我有一个复杂的查询,它已经返回了一些奇怪的结果(不是预期的数字)。 我钻了下去,发现问题似乎与icontains
。
首先,这里是我想在Django中运行的部分查询的mysql输出:
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 shell并运行:
query_set = Species.objects.filter(en_name__icontains='tortoise')
我得到一个结果:
>>> for i in query_set:
... print i.en_name
...
River Tortoise
在猜测中,我会说这是与en_name
字符串中的空白数量有关(River Tortoise有一个,而其他大于1)。 我也听说, icontains
在开发和生产中可以有不同的表现。
任何人都可以对此有所了解吗?
如果你想做RLIKE,我的理解是REGEXP的别名http://dev.mysql.com/doc/refman/5.0/en/regexp.html#operator_regexp
query_set = Species.objects.filter(en_name__regex='tortoise')
链接地址: http://www.djcxy.com/p/6587.html