2011-03-29 41 views
1

我正在使用Elixir連接到MSSQL數據庫。數據庫中有一個帶有計算列的表。但是,當我更新對象中的其他列並提交更改時,python告訴我我無法插入計算列。如何在使用Elixir寫入數據庫時​​單獨保留計算字段session.commit()

我正在使用的自動加載所以在我的模型:

class Slot(Entity): 
    using_options(tablename='tbScheduleSlots', autoload=True) 
    using_table_options(schema='sch') 

我創建了一個插槽,並給它一些值,然後提交:

ss = Slot(StartDateTime='2012-01-01 13:00:00:000', Program_ID=1234, etc) 
session.commit() 

重要提示!我不給ss對象EndDateTime的任何值,因爲這是一個計算字段。實際上,我沒有把任何東西傳回給那個領域的數據庫。

錯誤:

sqlalchemy.exc.ProgrammingError: (ProgrammingError) ('42000', '[42000] [FreeTDS][SQL Server]The column "EndDateTime" cannot be modified because it is either a computed column or is the result of a UNION operator. (271) (SQLPrepare)') 'INSERT INTO sch.[tbScheduleSlots] ([Program_ID], [SlotType_ID], [StartDateTime], [EndDateTime], [Duration], [Description], [Notes], [State], [MasterSlot_ID]) OUTPUT inserted.[ID_ScheduleSlot] VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)' (5130, 1, '2012-01-01 13:00:00:000', None, None, None, None, 2, None)

+0

需要更多信息!你如何定義你的表類?你如何更新列?你看到什麼錯誤信息?至少需要一些代碼片段。 – seb 2011-03-29 15:05:45

+0

你是對的,對不起。希望我的編輯更好 – MFB 2011-03-29 16:14:07

+0

我不知道是否有一個選項來告訴它忽略計算字段或某些字段的名稱? – HardCode 2011-04-01 14:49:19

回答

0

Ehhh,我不是一個Python程序員,但現在看來,這條線:

using_options(tablename='tbScheduleSlots', autoload=True) 

這是使用自動加載大概是什麼將[EndDateTime]到INSERT語句(如錯誤消息所示)。看起來這是告訴Python基礎表的元數據(即表中的字段)的行。尋找一種方法來定義手動更新的列。依靠Python構建INSERT似乎在底層查詢中自動包含[EndDateTime]

+0

你是對的,我可能期望太多有這個表自動加載。我會嘗試手動定義這個表。謝謝! – MFB 2011-03-31 08:28:19

相關問題