知道何时sqlalchemy过滤器找到了什么

时间:2018-11-13 21:38:59

标签: python sqlalchemy

我试图找出如何确定我的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

但是当我什么都没返回时,它似乎永远不会出错?我的逻辑完全搞砸了吗? “双重检查”是首选方式吗?还是我没有使用例外权利?

2 个答案:

答案 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