检查空的查询集

时间:2015-11-04 13:59:00

标签: django

我想确认这是检查空查询集的正确方法,如果这是为什么我有一个UNIQUE约束错误。

from sqlalchemy import func
result = session.query(People)\
    .filter(People.registered_at>= func.ADDDATE(func.NOW(), -1)).all()

我做了什么奇怪的事吗?我也使用了syn_check= Synonym.objects.filter(MD.objects.get(**filter_dict), synonym_type=Stype.objects.filter(description=values.capitalize().strip()), synonym_name=key) if not syn_check: print 'unavailable synonym', key, values syn = Synonym() syn.synonym_type=Stype.objects.filter(description=values.capitalize().strip() syn.synonym_name = key.strip() syn.save() ,我遇到了同样的问题。

这是追溯:

if not syn_check.count()

谢谢

1 个答案:

答案 0 :(得分:1)

正如您正在检查查询集一样。

if not syn_check:

然而,它并没有那么高效,你正在加载数据库中的所有对象,当你想知道的是查询集是否为空时。

最好使用count()

if not syn_check.count():

甚至更好地使用exists()

if not syn_check.exists():

代码中的问题是您定义查询集的位置

syn_check = Synonym.objects.filter(MD.objects.get(**filter_dict), synonym_type=Stype.objects.filter(description=values.capitalize().strip()), synonym_name=key)

filter()方法接受Q objects作为args或keyword arguments。将模型实例从MD.objects.get(...)作为位置参数传递是没有意义的。