最近在做一个Server的项目,后台框架是Apache mod_wsgi + django。
django是一个基于Python的Web开发框架,功能十分强大,至于有多强大,还是读者们自己去体验吧。
我在这里要说的一个问题是关于Python的ORM功能的。
问题就在django提供的数据库操作API中的distinct()函数,了解SQL语句的读者都应该知道,DISTINCT关键字可以在select操作时去重。django里的这个distinct()函数也是这个功能,通常的用法是我们要取出一张表中的某一列的所有值,并且只取出不重复的,如果有重复的就只取出来一次,网络上几乎所有的对这个函数的使用例子对应的Python代码都如下:
Python
1
xxxx.objects.values("field_name").distinct()
#或者
Python
1
xxxx.objects.distinct().values("field_name")
—–
需要注意的是,这样返回的是一个字典的列表,而不是通常的 QuerySet
—
这样是过滤不掉的,这是个问题,还是有5个对象在里面,对结果使用len(obj)就知道没有任何变化,但是如果只作统计不重复数据的个数的话,还是准确的3个
obj=ClassName.objects.values(‘name’).distinct()
len(obj)=5
obj.count()=3
但是结果集中没有起到任何的过滤作用,此问题有待解决!!!!!
有理有据,让人很信服的认