使用pyodbc读取DBF文件

ife*_*inm 5 python database dbf pyodbc

在一个项目中,我需要从Visual FoxPro数据库中提取数据,该数据库存储在dbf文件中,我有一个数据目录,需要考虑539个文件,每个文件代表一个数据库表,所以我一直在做一些测试和我的代码是这样的:

import pyodbc

connection = pyodbc.connect("Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=P:\\Data;Exclusive=No;Collate=Machine;NULL=No;DELETED=Yes")
tables = connection.cursor().tables()
for _ in tables:
    print _
Run Code Online (Sandbox Code Playgroud)

这打印只有15个表,没有明显的模式,总是相同的15个表,我认为这是因为其余的表都是空的但我检查了它,列表上的一些表(dbf文件)也是空的,然后,我认为这是一个权限问题,但所有文件都有相同的权限结构,所以,我不知道这里发生了什么.

任何光?

编辑: 它没有说明输出,它列出的表不是第一个或类似的东西

ife*_*inm 10

我做的!!!!

我在这里遇到了几个问题,在这里,我带来了解决它的问题(在第一次使用Ethan Furman的解决方案实施之后)

第一件事是驱动程序问题,事实证明Windows的DBF驱动程序是32位程序并在64位操作系统上运行,因此,我安装了Python-amd64,这是第一个问题,所以我安装了32位蟒蛇.

第二个问题是库/文件问题,根据这个,VFP> 7中的dbf文件是不同的,所以我的pyodbc库将无法正确读取它们,所以我尝试了一些OLE-DB库但没有成功,我决定从头开始.

谷歌搜索了一会儿带我到这篇文章,最后给了我一个关于这个的消息

基本上,我做的是以下内容:

import win32com.client

conn = win32com.client.Dispatch('ADODB.Connection')
db = 'C:\\Profit\\profit_a\\ARMM'
dsn = 'Provider=VFPOLEDB.1;Data Source=%s' % db
conn.Open(dsn)

cmd = win32com.client.Dispatch('ADODB.Command')
cmd.ActiveConnection = conn
cmd.CommandText = "Select * from factura, reng_fac where factura.fact_num = reng_fac.fact_num AND factura.fact_num = 6099;"

rs, total = cmd.Execute() # This returns a tuple: (<RecordSet>, number_of_records)

while total:
    for x in xrange(rs.Fields.Count):
        print '%s --> %s' % (rs.Fields.item(x).Name, rs.Fields.item(x).Value)
    rs.MoveNext()        #<- Extra indent
    total = total - 1
Run Code Online (Sandbox Code Playgroud)

它给了我20条记录,我用DBFCommander检查过并且没问题

首先,你需要安装pywin32扩展(32位)和Visual FoxPro OLE-DB提供程序(仅适用于32位),在我的情况下为VFP 9.0

另外,在w3c网站上阅读de ADO文档是很好的

这对我有用.非常感谢那些回复的人