好吧,我使用的是一种古老的数据库格式,dbf文件。不要问为什么,只知道某个软件决定扩展foxpro支持,因为微软决定扩展foxpro支持。现在,我得到一个特定文件的以下错误。我已经成功地加载了另一个文件,我很好奇这个数据库是否有问题。我相信你可能需要查看数据库来确定这一点,但它的方式是巨大的张贴,所以我会采取我可以得到的。在
Traceback (most recent call last):
File "billsapi.py", line 250, in <module>
x.getUsedGuns()
File "billsapi.py", line 72, in getUsedGuns
itemdb = dbf.Dbf('item.dbf', readOnly=True, ignoreErrors=True)
File "C:\Python27\lib\site-packages\dbfpy\dbf.py", line 135, in __init__
self.header = self.HeaderClass.fromStream(self.stream)
File "C:\Python27\lib\site-packages\dbfpy\header.py", line 127, in fromStream
_fld = fields.lookupFor(_data[11]).fromString(_data, _pos)
File "C:\Python27\lib\site-packages\dbfpy\fields.py", line 455, in lookupFor
return _fieldsRegistry[typeCode]
KeyError: '0'
下面是我返回错误的简单代码:
^{pr2}$就像我说的,我可以加载没有问题的其他文件,但也许有一个解决这个特定错误的方法?在
EDIT:我还想指出,可以在DBF View Plus中打开、查看和修改该文件。在
编辑:找到解决方案。我最终使用了python dBase模块。我想我的主要问题是没有备忘录文件(不管它们是什么,它有一个.fpt文件扩展名)。我现在使用的是:
from dbf.tables import VfpTable
itemdb = VfpTable('item.db')
for rec in itemdb:
print rec['MY_COLUM_NAME']
我还想指出的是,任何目前仍在使用FoxPro的人都应该被烧死。在
可能是这样项目.dbf使用其他dbf没有的更高级的dbf功能。例如,自动递增整数的引入很晚,大多数odbc驱动程序都不支持它。在
您应该看看Sybase的Advantage Database Server。这个产品对VFP DBF文件有很好的支持。我已经通过pyodbc将他们的ODBC驱动程序与Python一起使用了几年,并且使用他们最近发布的一个与DB-api2.0兼容的Python driver获得了非常好的结果。在
我也被置于必须支持DBF表的位置。Advantage数据库服务器是绝对的救星。在
回溯是dbfpy告诉您文件中有一个dbfpy不支持的字段类型代码
0
。这是一个visualfoxpro(“VFP”)的东西。在这和备忘录文件无关。是的,如果有备注字段,则它们存储在}需要出现。在
.FPT
文件中。^当您访问foo.dbf
时,{你说“我最终使用了python dBase模块”。。。假设您指的是ethanfurman的
dbf
模块,根据它的PyPI entry不支持空字段。在我有一个DBF阅读模块(
pydbfrw
),我一直想在“有一天”发布它。以下是其文档摘录:我的模块实现了识别,并在需要的地方为字段值返回
None
。如果你想要这个模块的副本,请找到我的电子邮件地址,例如google(“john machin xlrd”)给我发电子邮件,我会把它发给你。在相关问题 更多 >
编程相关推荐