Объекты запросов могут рассматриваться как итераторы как есть. SQL будет выполнен, как только вы начнете использовать данные из итератора запроса. Пример:
for author in session.query(Author).filter(Author.queried==0):
print "Processing: ", author
Ваш вопрос использует слово «бесконечно», поэтому слово предостережение. SQL не является API обработки событий; Вы не можете просто выполнить запрос, который выполняется «навсегда» и выплевывает каждую новую строку, когда она добавляется в таблицу. Хотелось бы, чтобы это было возможно, но это не так.
Если вы намерены обнаруживать новые строки, вам придется регулярно опрашивать один и тот же запрос и создавать индикатор в вашей модели данных, который позволит вам указать, какие строки новые. Вы, кажется, представляете это сейчас с queried
столбцом. В этом случае в цикле for
выше вы можете установить author.queried = 1
и session.add(author)
. Но вы не можете session.commit()
внутри цикла.