Python 修改炼金术查询结果

Python 修改炼金术查询结果,python,flask,sqlalchemy,flask-sqlalchemy,Python,Flask,Sqlalchemy,Flask Sqlalchemy,我想在将结果发送到render\u template()之前,通过修改flask sqlalchemy查询的结果 该视图查询并修改以下项目: items = Items.query for i in items: date = i.__dict__['date'] i.__dict__['date_modified'] = date.replace('/', '-') return render_template('index.html', items=items) {%

我想在将结果发送到
render\u template()
之前,通过修改flask sqlalchemy查询的结果

该视图查询并修改以下项目:

items = Items.query

for i in items: 
    date = i.__dict__['date']
    i.__dict__['date_modified'] = date.replace('/', '-')

return render_template('index.html', items=items)
{% for i in items %}{{i.date_modified}}{% endfor %} 
当模板输出项目时:

items = Items.query

for i in items: 
    date = i.__dict__['date']
    i.__dict__['date_modified'] = date.replace('/', '-')

return render_template('index.html', items=items)
{% for i in items %}{{i.date_modified}}{% endfor %} 
此错误显示在调试器中:

KeyError: 'date_modified'
但是,如果我修改初始查询以获得分页对象,则不会引发错误,并显示修改日期

items = Items.query
items = items.paginate(page_num, items_per_page, True).items 

for i in items: 
    date = i.__dict__['date']
    i.__dict__['date_modified'] = date.replace('/', '-')

return render_template('index.html', items=items)

查询结果和分页结果之间的区别是什么?分页结果允许后者被就地操作,而不是前者?如何在不使用paginate修改查询的情况下修改结果?

在这两个示例中,您都将
项传递给模板。但是,
值在每种情况下都不同

在第一个示例中,
items
是来自
items.Query
的查询对象。这个值可以迭代,这就是for循环工作的原因。但这些物品需要存放在永久的地方。在模板中,再次迭代查询,并返回视图中未修改的新Items实例

在第二个示例中,
items
paginate
的结果,它是
项的列表。修改每个项目时,它仍存储在列表中,在模板中再次对其进行迭代将生成相同的项目

要解决第一个示例中的错误,需要存储对返回项的引用。最简单的方法是强制查询返回一个列表:
items=items.query.all()