Python DBF。使用fpt备注字段将记录添加到dbf表

时间:2017-04-09 17:07:04

标签: python visual-foxpro foxpro dbf

我正在尝试将记录添加到具有索引文件和备忘录文件的现有空DBF表(Fox Pro)中。它已存在于我的文件夹中:

Table.dbf
Table.fpt
Table.cdx

Table.dbf有三个字段:

Field1 (Integer)
Field2 (Character)
Field3 (Memo)

我使用

中描述的方法

http://stackoverflow.com/questions/37891686/how-to-add-a-field-to-a-dbf-file

如下:

import dbf

db = dbf.Table('table.dbf')
db.open() 
rec = dbf.create_template(db) 
rec.field1 = 9 
rec.field2 = ('some text')
db.append(rec)

到目前为止一切顺利。问题是当字段是memo类型时

Db = dbf.Table ('table.dbf')
Db.open ()
Rec = dbf.create_template (db)
Rec.field1 = 9
Rec.field2 = ('some text')
Rec.field3 = ('This is a long text')
Db.append (rec)

然后我收到一条错误消息:

Traceback (most recent call last):
   File "dbf12.py", line 8, in <module>
     Rec.field3= ('This is a long text')
   File "...libsite-packages\dbf\ver_33.py", line 2959, in __setattr__
     Self._dirty = True
   File "...libsite-packages\dbf\ver_33.py", line 2956, in __setattr__
     Raise FieldMissingError (name)
Dbf.ver_33.FieldMissingError: '_dirty: no such field in table'

我在

中看过类似的问题

Http://stackoverflow.com/questions/16682470/using-python-to-write-dbf-table-with-fpt-memos?rq=1

我试图改变:

Db = dbf.Table ('table.dbf', dbf_type = 'Vfp')

但结果是一样的。

有谁知道输入备忘录字段的正确方法?

感谢。

1 个答案:

答案 0 :(得分:0)

我在最新版本中没有看到此行为,但如果您无法升级,则还有其他几种选择:

  • 将数据作为tuple传递(字段必须按顺序排列)

  • 将数据作为dict

  • 传递

例如:

db.append( (9, 'some text', 'a lot of text') )

db.append( {'field1': 9, 'field3': 'a lot of text', 'field2': 'some text'} )