在Python中将数据写入dbf时出错

时间:2014-03-07 07:05:11

标签: python dbf

我犯了这个错误:

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

1 个答案:

答案 0 :(得分:8)

dbf与大多数其他数据库包的不同之处在于,您没有获得完全独立的数据结构(例如,一堆行作为元组),而是直接使用dbf文件本身。

我发现自己遇到的问题是,当我一次更新多个字段时:

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

如果在第一个字段之后的任何时间发生错误,我的记录只是部分更新,因此不再内部一致。

为了解决这个问题,我在每条记录的基础上添加了类似类似提交的代码,激活它的方式是with或{{1} }:

Process

现在,如果发生错误,则恢复原始值;如果没有错误,则新值将保存到磁盘上的with record: # capture current values record.field1 = something record.field2 = something_else record.field3 = another_thing # now some other code 表中。

除了记录上的dbf之外,你还可以在一堆记录上使用with,或者你可以避免这个问题并在记录之外收集你的数据,然后一次写下来:< / p>

Process

因此,要回到您的代码,最简单的解决方法可能是:

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