从sqlalchemy query.filter返回Basequery对象而不是模型对象

时间:2015-11-19 21:04:52

标签: python flask sqlalchemy

我的烧录代码中有两行正在进行dbase调用。这一行:

articles += Entries.query.filter(and_(Entries.id == article.article_id, Entries.tags.like(search_string))) # @UndefinedVariable

返回一个Models.Entries对象。

这一行:

articles.append(Entries.query.filter(Entries.id == 3)) # @UndefinedVariable

返回一个Basequery对象。我需要一个Models.Entries对象!可能会发生什么?

1 个答案:

答案 0 :(得分:2)

假设articles是一个列表,添加到列表基本上等同于articles.extend(other_iterable)Query是可迭代的:迭代它,返回结果。

在第二个示例中,您没有执行查询,而是将其附加到列表中。 +=的等效代码将使用extend,而不是append

articles.extend(Entries.query.filter_by(id=3))

看起来您正在通过ID查询单个项目。而不是执行多个查询并收集结果,而是在id列表上执行一个查询并直接获得结果。

articles = Entries.query.filter(Entries.id.in_([1, 2, 3, 4])).all()