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

2024-09-29 21:34:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个错误:

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

如何修复?在

这是我的代码

^{pr2}$

Tags: orto代码infields错误withprocess
1条回答
网友
1楼 · 发布于 2024-09-29 21:34:48

dbf与大多数其他DB包不同的是,它不是获得完全独立的数据结构(例如,一堆行作为元组),而是直接处理dbf文件本身。在

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

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

如果在第一个字段之后的任何时候发生错误,我的记录只进行了部分更新,因此不再具有内部一致性。在

为了解决这个问题,我添加了一段代码,它是一种基于每条记录的提交,激活它的方法是使用withProcess

^{pr2}$

现在,如果发生错误,将恢复原始值;如果没有发生错误,新值将保存到磁盘上的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

相关问题 更多 >

    热门问题