我使用下面的代碼通道postgres的DB對象的變化:SQLAlchemy的不承諾
@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。我可以確認從DB「budget_item」查詢的對象正在由settattr更新。在最後,我使用commit()來更新對象;但是,數據庫並未反映這些更改。爲了測試以確保事情正在流動,我嘗試了session.add(budget_item),然後是session.commit()以確保連接到數據庫正常。這樣可行。我如何將這個budget_item對象更新到數據庫中?任何幫助深表感謝。
你想做什麼?您似乎正在將_50000!_新屬性添加到_new_「預算」實例。請注意,第二個'budget_item'是與您最初檢索的實例不同的實例。由於映射中不存在這些屬性(當然,我假設它們沒有),更新'budget_item'將不會有任何影響。另外,這是一個新的實例,所以你需要將它添加到會話中。也許你應該多解釋一下你試圖做的事情。 – mhawke