Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django在发育中的奇怪行为_Django_Django Queryset - Fatal编程技术网

Django在发育中的奇怪行为

Django在发育中的奇怪行为,django,django-queryset,Django,Django Queryset,我在开发服务器上使用icontains时遇到了一些奇怪的行为。我有一个复杂的查询,它返回了一些奇怪的结果(不是预期的数字)。我深入研究,发现问题似乎出在icontains上 首先,这里是我想在Django中运行的部分查询的mysql输出: mysql> select * from species where en_name RLIKE 'tortoise'; +-------+----------------------------------+ | id | en_name

我在开发服务器上使用
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 Ortoise有一个空格,而其他的都>1)。我还听说,
icontains
在开发和生产中的行为会有所不同


有人能解释一下吗?

如果你想做RLIKE,我认为它是REGEXP的别名


运行此命令,查看实际创建的sql:>>>打印查询集.query每个原因上面只是一个示例,如果我运行打印查询集.query,那么我会在实际数据集上获得一组连接。不过,导入部分会出现
。。。其中
mytable
en_name`LIKE%tortoise%`。不应该是RLIKE吗?不确定你会如何得到LIKE而不是ILIKE,但是看看我关于如何获得你想要的RLIKE行为的答案,只显示Id最低的最短结果。仔细检查模型字段
物种.名称
长度和模型字段
物种.id
类型(如果是显式声明的。还要检查表索引。请:发布信息:model和descr species表。这似乎只发生在开发端。在生产服务器上,查询按预期运行。相同的代码、Django版本和数据。我唯一能想到的是,在数据库级别上存在一些差异。正如我所知分区-这是一个示例,实际数据更广泛。可能存在一些FK问题。我想没有其他人遇到过类似的问题?
query_set = Species.objects.filter(en_name__regex='tortoise')