Max*_* R. 5 python django postgresql orm hstore
拥有以下型号:
from django_hstore import hstore
from django.db import models
class Item(VoteModel):
data = hstore.DictionaryField(db_index=True)
objects = hstore.HStoreManager()
Run Code Online (Sandbox Code Playgroud)
就像是:
Item.objects.extra(select={"key": "content_item.data -> 'key'"}).aggregate(Count('key'))
Run Code Online (Sandbox Code Playgroud)
不起作用,参见 在Django Query中使用.extra(select = {...})引入的值上使用.aggregate()?和https://code.djangoproject.com/ticket/11671.
有效的原始SQL如下:
SELECT content_item.data -> 'key' AS key, count(*) FROM content_item GROUP BY key;
key | count
-----------+-------
value1 | 223
value2 | 28
value3 | 31
(3 rows)
Run Code Online (Sandbox Code Playgroud)
如何通过Django的ORM获得相同的结果?
供参考:
Item.objects.extra(select={"key": "content_item.data -> 'key'"})
Run Code Online (Sandbox Code Playgroud)
翻译为:
SELECT (content_item.data -> 'key') AS "key", "content_item"."id", "content_item"."data" FROM "content_item"
Run Code Online (Sandbox Code Playgroud)
你尝试过值和order_by吗?
Item.objects.extra(
select=dict(key = "content_item.data -> 'key'")
).values('key').order_by('key').annotate(total=Count('key'))
Run Code Online (Sandbox Code Playgroud)
在PostgreSQL和Django 1.4中,这样的东西对我有用.