2014-03-07 37 views
5

寫入數據轉換成dbf,當我得到這個錯誤:錯誤在Python

DbfError: unable to modify fields individually except in with or Process() 

如何解決呢?

這是我代碼

with dbf.Table("aa.dbf") as table: 
    for record in table: 
    record[3] = 200 
+0

縮進是否正如我們所看到的那樣? –

+0

已更新yet.sorry。 – UnZike

回答

5

dbf是,與其讓一個完全獨立的數據結構與其他大多數DB包不同(一幫行作爲元組,例如)你的工作直接與dbf文件本身。

我發現自己跑到了這個問題,當我一次更新多個字段:

record.name = 'Some Name' 
record.age = current_year -birth_year 
record.hair_color = base_color * sun_tint 

如果一個錯誤的第一場發生後的任何時間我有隻有部分更新的記錄,因此不再內部一致。

要解決這個問題,我添加的代碼,這是喜歡犯在每記錄的基礎,並且方法來激活它與withProcess:如果

with record: # capture current values 
    record.field1 = something 
    record.field2 = something_else 
    record.field3 = another_thing 
# now some other code 

現在,發生錯誤,原始值被恢復;如果沒有錯誤發生,則將新值保存到磁盤上的dbf表中。

除了with上的記錄,你也可以在一堆記錄使用Process,或者你可以迴避的問題,並收集記錄外的數據,然後立即它寫:所以

for record in table: 
    new_data = {} 
    new_data['field1'] = 'a name' 
    new_data['field2'] = an_age 
    dbf.write(record, new_data) 

,要回到您的代碼,修復它的最簡單方法可能是:

with dbf.Table("aa.dbf") as table: 
    for record in dbf.Process(table): 
     record[3] = 200 
+0

很酷,這真是太好了,謝謝,問題解決了。 dbf是一個很好的lib。 – UnZike