зная, когда sqlalchemy фильтр нашел что-то или нет - PullRequest
0 голосов
/ 14 ноября 2018

Я пытался выяснить, как выяснить, было ли что-то найдено моим вызовом фильтра 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 голосов
/ 14 ноября 2018

Вы можете использовать количество, например,

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
0 голосов
/ 14 ноября 2018

Вы можете попробовать

    ld = LunchDay.query.filter(and_(func.DATE(LunchDay.timestamp == datetime.date.today()), LunchDay.status==1)).all()

    if ld:
       for row in ld:
           // your code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...