2011-11-18 92 views
0

我有很多代碼正在編輯數據庫,但我想要做的是加載所有需要編輯或添加到會話中的數據,返回一個網頁,並且一次用戶查看了數據,然後提交到數據庫。事情是這樣的:Python數據庫會話(meta.Session)

def index(self): 
    empsTbl = meta.Session.query(model.Person).all(); 
    newEmp = model.Person() 
    newEmp.userid = row[0].strip() 
    meta.Session.add(newEmp) 
    return render("/update.html") 

def commitSession(self): 
    meta.Session.commit() 

如果我嘗試按網頁按鈕調用commitSession閃避,會話似乎是空的。我已經試過模型上的一些東西,如:

Session.configure(autoflush=False, autocommit = False, bind=engine) 

我也改變了基礎控制器。我刪除了代碼:

meta.Session.remove() 

因此它不會在每次調用後刪除會話。

我一直在使用合併,看看是否會會話存儲在數據庫持續性會議也試過:

meta.Session.merge(newEmp) 

但我仍然不能似乎得到它的工作。

編輯:

如果有人可以給到醃製一個Python會話將是非常有益

+0

最好讓您的交易限於非常特殊的操作,而不需要花費很多時間。請編輯您的問題以描述您的交易的邏輯和程序化範圍,即您獲得會話的時間與您提交的時間之間會發生什麼? – wberry

回答

1

我希望它不是那麼最好的辦法提醒,但似乎你還沒有了解你的網絡應用程序的生命週期。 在你的情況下你有2個生命週期,因爲你有2個動作。 2個請求/響應場景。你必須明白,(主要)你在一個行動中做的所有事情,它都停留在那裏。 您的數據庫會話的行爲「索引」是另一個作爲「commitSession」中的一個,因此,「commitSession」中的會話爲空。爲什麼?因爲你只是提交一個新創建的會話。

你需要做的是爲你和你的事業尋找一種工作方式,將信息從行動「索引」傳輸到行動「commitSession」。最常用的方法是將信息序列化,將其放入您的websession中,並在「commitSession」中將其反序列化,然後將其寫入數據庫並使websession中的信息無效。 或者您將所有信息從「索引」中移出一些隱藏字段,然後再次將它們發佈到「commitSession」。

+0

這是我需要知道的。我認爲我可能不得不醃製該會議,但我不確定是否有可能在整個交易過程中堅持現有會話。 – JackalopeZero