2024-09-29 21:34:48 发布
网友
我有这个错误:
DbfError: unable to modify fields individually except in with or Process()
如何修复?在
这是我的代码:
dbf与大多数其他DB包不同的是,它不是获得完全独立的数据结构(例如,一堆行作为元组),而是直接处理dbf文件本身。在
dbf
我发现自己遇到的问题是,当我一次更新多个字段时:
record.name = 'Some Name' record.age = current_year -birth_year record.hair_color = base_color * sun_tint
如果在第一个字段之后的任何时候发生错误,我的记录只进行了部分更新,因此不再具有内部一致性。在
为了解决这个问题,我添加了一段代码,它是一种基于每条记录的提交,激活它的方法是使用with或Process:
with
Process
现在,如果发生错误,将恢复原始值;如果没有发生错误,新值将保存到磁盘上的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
与大多数其他DB包不同的是,它不是获得完全独立的数据结构(例如,一堆行作为元组),而是直接处理dbf文件本身。在我发现自己遇到的问题是,当我一次更新多个字段时:
如果在第一个字段之后的任何时候发生错误,我的记录只进行了部分更新,因此不再具有内部一致性。在
为了解决这个问题,我添加了一段代码,它是一种基于每条记录的提交,激活它的方法是使用
^{pr2}$with
或Process
:现在,如果发生错误,将恢复原始值;如果没有发生错误,新值将保存到磁盘上的
dbf
表中。在除了对一个记录使用
with
之外,还可以对一堆记录使用Process
,或者可以避免这个问题,在记录之外收集数据,然后一次将其全部写入:因此,要回到您的代码,最简单的修复方法可能是:
相关问题 更多 >
编程相关推荐