Я полагаю, есть два способа сигнализации о пустом ответе, и разные движки используют разные подходы.
Либо БД может вернуть объект-курсор, который не содержит ни одной строки.
Либо БД может вернуть None.
Для понятности такая аналогия: пусть нам возвращают список. Если нам всегда возвращают список, то можем писать код так:
for line in db.query("..."):
do_something(line)
Сработает даже еслди в ответе нет ни одной строки, т.е. на пустом списке.
А вот если нам при пустом ответе возвращают None, то код выше вылетит с ошибкой NoneType is not iterable, и надо будет переписать так:
result = db.query("...")
if result is not None:
for line in result:
do_something(line)