2013-02-23 103 views
0

我有很多列應該插入數據的表。我不想重新鍵入列的名稱,因爲我已經在「SQLAlchemy類定義」中鍵入了它們。如何在不輸入列名的情況下引用列?

從其他發佈的問題,我看到你可以得到下面的代碼列的名稱。

for c in datatable.__table__.columns.keys(): 
    print(c) 

這將給出列名稱。但是,我想要的是將數據插入列而不只是讀取列名稱。以下是我嘗試過的。

for_counter = 0 
for instance in SESSION.query(SampleClass).filter(SampleClass.id == 2): 
    instance.__table__.columns.keys()[(for_counter)] = "texttoinsert" 
    for_counter += 1 

我以爲我可以「指數」這一列,但是當代碼運行,我檢查數據庫,僅自動遞增「ID」列,被設置爲默認爲「現在」得到的日期數據。 「實例」中的所有其他列都沒有獲取任何數據,而我期望在列中找到「texttoinsert」。

基本上我只想建立一個函數,只要我指定了表的名字就可以「可以使用」列索引來插入數據。有沒有辦法做到這一點?

回答

1

for循環正在替換instance.__table__.columns.keys()數組中的值,而不是在instance上設置相應的屬性。這應該做的伎倆:

for instance in SESSION.query(SampleClass).filter(SampleClass.id == 2): 
    for colname in instance.__table__.columns.keys(): 
    setattr(instance, colname, 'text_to_insert') 

作爲一個側面說明,因爲所有實例都具有相同的密鑰,顛倒兩個循環會導致更好的性能(你不需要每次都重新創建鍵數組) 。

+0

這工作。老兄,你剛剛爲我挽救了大量的頭髮。重要的是,我已經扭轉了循環,從4秒鐘開始,現在耗時0.514秒!感謝您的額外提示 – lukik 2013-02-23 16:23:36

+0

隨時,很高興它的工作! – mtth 2013-02-23 17:07:56

相關問題