我想确认这是检查空查询集的正确方法,如果这是为什么我有一个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()
谢谢
答案 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(...)
作为位置参数传递是没有意义的。