【问题标题】:Error when writing data into dbf in Python在 Python 中将数据写入 dbf 时出错
【发布时间】:2014-03-07 07:05:11
【问题描述】:

我错了:

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

【问题讨论】:

  • 我们看到的缩进是否正确?
  • @Tim:就是现在。
  • @EthanFurman 谢谢,过去 8 年我一直在想

标签: python dbf


【解决方案1】:

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

【讨论】:

  • 酷,你很好。谢谢,问题解决了。 dbf 是一个不错的库。
  • 使用最后一个版本的dbf模块,正确的语法是:dbf.write(record, **new_data)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 2015-08-13
  • 2014-01-21
  • 2021-08-01
  • 2017-11-08
  • 2018-03-06
相关资源
最近更新 更多