如果我有我的日誌級別設置爲INFO,以下兩個行會導致查詢集仍然進行評估,即使未打印的數據:懶惰的評價
logger.debug("Count is %s"%Widget.objects.count())
logger.debug("Count is %s", Widget.objects.count())
有沒有辦法避免這種情況?
如果我有我的日誌級別設置爲INFO,以下兩個行會導致查詢集仍然進行評估,即使未打印的數據:懶惰的評價
logger.debug("Count is %s"%Widget.objects.count())
logger.debug("Count is %s", Widget.objects.count())
有沒有辦法避免這種情況?
唯一方法是存儲價值變量
obj_count = Widget.objects.count()
logger.debug("Count is %d"% obj_count)
logger.debug("Count is %d", obj_count)
但問題是,如果日誌級別爲INFO,我不希望查詢運行,因爲消息不會顯示 – alan
我找到了答案在這裏:
https://stackoverflow.com/a/4149190/390973
class Lazy(object):
def __init__(self,func):
self.func=func
def __str__(self):
return self.func()
logger.debug(Lazy(lambda: "Count is %s"%Widget.objects.count()))
'計數()'返回INT,不查詢集。 (立即評估)。請參閱https://docs.djangoproject.com/en/1.5/ref/models/querysets/#when-querysets-are-evaluated – falsetru
,但即使我使用查詢集,也有同樣的問題,例如logger.debug('count is%s',User.objects.all())立即運行查詢,即使日誌級別設置爲INFO,以便郵件不會出現在日誌中 – alan
即使郵件不是顯示,它被轉換爲字符串;那需要評估。 – falsetru