Как вместо этого сделать нулевое / нулевое значение 0? - PullRequest
0 голосов
/ 08 мая 2020

У меня есть sqlalchemy, который подсчитывает строки со значением «3», а затем выводит их количество. Он отлично работает, если счетчик равен 1, 2, 3, et c, но когда элементов нет, он ничего не печатает. Я хотел, чтобы он напечатал 0. Поэтому я добавил оператор if / else, который не работал (он ничего не печатает, без ошибок).

Как мне это сделать? Вот мой текущий код - не совсем уверен, должен ли я выполнять эту часть в sqlalchemy или python.

q = (db.session.query(Article.snippet, sa.func.count(ArticleVote.id))
     .join(ArticleVote, Article.id == ArticleVote.article_id)
     .filter(Article.snippet == a_obj.snippet)
     .filter(ArticleVote.vote_choice_id == 3)
     .group_by(Article.snippet))
for snippet, count in q:
    if count is None:
        threevotes = 0
    else:
        threevotes = count
    print(snippet, count)
    print("threevotes", threevotes)

Обновление: я сделал это внешнее соединение. Это не помогло.

     .join(ArticleVote, Article.id == ArticleVote.article_id, isouter=True)

Обновление: я нашел обходной путь. Я не думаю, что это правильный способ делать что-то, и я обеспокоен, что это может быть проблематично c в будущем, поэтому, если у кого-то есть идея получше (или он может сказать мне, может ли это быть проблематично *) 1014 *) было бы здорово.

if 'threevotes' in locals():
    print("threevotes in locals")
else:
    print("threevote not in locals")
    threevotes= 0
...