我试图找出如何确定我的sqlalchemy过滤器调用是否找到了某些东西,以了解是否应该遍历结果。
我能弄清楚如何做到这一点的另一种方法是先打电话:
ld = ld=LunchDay.query.filter(and_(func.DATE(LunchDay.timestamp == datetime.date.today()), LunchDay.status==1)).first()
然后,如果ld为None,则不会找到任何内容。但是,如果是这种情况,我将无法遍历发现的所有内容,因此我必须再次拨打电话:
ld = ld=LunchDay.query.filter(and_(func.DATE(LunchDay.timestamp == datetime.date.today()), LunchDay.status==1))
我认为必须有一种更好的方法,我认为如果什么也没找到,过滤器就会抛出异常,所以我确实尝试过(在外壳中):
try:
ld=LunchDay.query.filter(and_(func.DATE(LunchDay.timestamp == datetime.date.today()), LunchDay.status==1))
#do stuff with results
except sqlalchemy.orm.exc.NoResultFound:
#SHOW THE ERROR
但是当我什么都没返回时,它似乎永远不会出错?我的逻辑完全搞砸了吗? “双重检查”是首选方式吗?还是我没有使用例外权利?
答案 0 :(得分:1)
您可以使用计数,例如
count = LunchDay.query.filter(and_(func.DATE(LunchDay.timestamp == datetime.date.today()), LunchDay.status==1)).count()
if count:
# do stuff
或者您可以使用.all()进行迭代:
lds =LunchDay.query.filter(and_(func.DATE(LunchDay.timestamp == datetime.date.today()), LunchDay.status==1)).all()
for ld in lds:
# do stuff
答案 1 :(得分:0)
您可以尝试
ld = LunchDay.query.filter(and_(func.DATE(LunchDay.timestamp == datetime.date.today()), LunchDay.status==1)).all()
if ld:
for row in ld:
// your code