0
我遇到了sqlalchemy問題,其中會話似乎成功提交,但數據未出現在基礎數據庫表中。但是,在提交之前和之後打印提交的項目時,會顯示數據。基本上,我想要做的是分配一個項目(要更新的行),然後更新數據庫中的計算值。SQLAlchemy:會話提交/刷新成功,但數據確實出現在數據庫中
任何提示,感激!如果下面的代碼不是最乾淨的,我會提前道歉 - 我剛剛開始自學python。
query_od_matrix = session.query(dr.ODMatrix).order_by(dr.ODMatrix.distance)
def generate_bins(qry):
mx = session.query(sa.func.max(dr.ODMatrix.origin_stops_id)).scalar()
# Testing
# print mx
for o in range(1, mx+1): # o=origin, d=destination
query = qry.filter(dr.ODMatrix.origin_stops_id == o)
dest_id = []
dest_dist = []
for row in query:
# Testing
# print row.origin_stops_id, row.destination_stops_id, row.distance
dest_id.append(row.destination_stops_id)
dest_dist.append(row.distance)
# Testing
# print dest_id, dest_dist
no_items = len(dest_id)
for d in range(0, no_items):
# Testing
# print d, dest_id[d], dest_dist[d]
if d == 0: # First item
lower = 0
upper = 0.5 * (float(dest_dist[d]) + float(dest_dist[d+1]))
elif d == no_items-1: # Last item
lower = 0.5 * (float(dest_dist[d]) + float(dest_dist[d-1]))
upper = None
else:
lower = 0.5 * (float(dest_dist[d]) + float(dest_dist[d-1]))
upper = 0.5 * (float(dest_dist[d]) + float(dest_dist[d+1]))
item = dr.ODMatrix(origin_stops_id=o, destination_stops_id=dest_id[d])
# Testing
# print d, dest_id[d], lower, upper
# print dest_id[d], item.destination_stops_id
item.bin_from = lower
item.bin_to = upper
# Testing
# session.dirty
# print item.origin_stops_id, item.destination_stops_id, item.bin_from, item.bin_to
session.commit()
# session.flush()
# Testing
# session.dirty
# print item.origin_stops_id, item.destination_stops_id, item.bin_from, item.bin_to
啊,謝謝!有時我覺得很蠢。但是,雖然這工作,它會創建新的行。有沒有辦法更新現有的? – Daniel
要更新現有的只需設置新值並提交,就像這樣'item = session.query(dr.ODMatrix).first(); item.bin_form = new_value; session.commit()' –
令人驚歎,非常感謝! – Daniel