Django ORM将映射此查询集
TestModel.objects.filter(module="test", deleted=False)
对于此原始sql:
select coll1, coll2, coll3 from test_module where (TestModel.deleted=0 and TestModel.module="test")
无论您将“deleted”放在filter paras中的何处,它都会首先出现在where子句中。你知道吗
我的第一个猜测是Django把所有的bool/tinyint字段放在其他字段之前,但测试显示不是这样。似乎Django只是把名为“deleted”的字段放在了其他人的前面。很奇怪,但为什么?你知道吗
因为我正在向mysql表添加索引,所以顺序非常重要。你知道吗
关键字参数作为字典处理,字典具有任意顺序。
deleted
键恰好排在该顺序的第一位:字典中的排序由它们在基础哈希表中哈希到的槽决定。一个小字典从8个槽开始,
'deleted'
散列到槽0,'module'
散列到槽6:换句话说,由于Python字典的具体实现细节,首先列出
'deleted'
完全是巧合。Django并不是故意先列出那一列。你知道吗顺序在这里并不重要,SQL数据库也不在乎什么是第一位的。你知道吗
相关问题 更多 >
编程相关推荐