我使用以下代码段:
@app.route('/budget_item/<int:budget_id>/edit', methods=['GET', 'POST'])
def budget_item_edit(budget_id):
budget_item = session.query(Budget).filter_by(id=budget_id).one()
print "Start EDIT sequence"
# Return form data from HTML initial load form
elif request.method == 'POST':
budget_amount_reallocated_total = budget_item.budget_amount_reallocated_total
#ORIGINAL BUDGET
if request.form['transaction_type'] == 'Original Budget':
#amount
if request.form['amount'] == "":
amount = 0
else:
amount = float(str(request.form['amount']))
budget_item = Budget(
#created_date = "",
budget_transaction_type = request.form['transaction_type'],
budget_line = request.form['budget_line'],
amount = amount,
description = request.form['description']
#date_received = request.form['date_received']
)
try:
count = 1
while count < 10000:
count += 1
#budget_line
setattr(budget_item,'budget_line'+str(count),request.form['budget_line'+str(count)])
#amount
setattr(budget_item,'amount'+str(count),float(request.form['amount'+str(count)]))
budget_amount_reallocated_total += float(request.form['amount'+str(count)])
setattr(budget_item, 'budget_amount_reallocated_total', budget_amount_reallocated_total)
#description
setattr(budget_item,'description'+str(count), request.form['description'+str(count)])
#date_received
setattr(budget_item,'date_received'+str(count),request.form['date_received'+str(count)])
session.commit()
except:
session.commit()
return redirect(url_for('budget_master'))
else:
print "I'm done! This is not a post request"
这段代码被设置为通过POST请求从HTML传递数据,然后在Postgres数据库中更新相应的对象。我可以确认从DB“budget_item”查询的对象正在被settattr更新。在本文的最后,我使用commit()更新对象;但是,数据库没有反映这些更改。只是为了测试一下,以确保一切顺利进行,我已经试过了会话.add(预算项目)后接会话.提交()以确保与数据库的连接正常。这很管用。如何将此预算项目对象更新到数据库中?任何帮助都是非常感谢的。在
要回答您的问题,要更新数据库中已经存在的
budget_item
,您需要更新从数据库中检索到的Budget
实例,即不是您新创建的:
^{pr2}$这里的第一个
budget_item
表示数据库中的行,因此这是要更新的行。为此,您可以将创建第二个Budget
实例的代码替换为:更新完
Budget
实例后,可以调用session.commit()
将其刷新到数据库中。在正如我在对您的问题的评论中所提到的,您似乎正在尝试向
budget_item
添加大量附加属性,所有这些属性都将被sqlalchemy忽略,除非它们是在Budget
实例与Budget
表之间的映射中定义的。在我认为一个简单的
是正确的方法
相关问题 更多 >
编程相关推荐