2011-03-24 180 views
3

我正在使用Visual Fox Pro数据库(.dbf文件),我正在使用dbf python模块。这里有一个例子:Visual Fox Pro和Python

myDb = VfpTable('table.dbf'); 

现在我可以排除这个删除的项目执行下列操作:

myDb._use_deleted = None; 

我的问题(S)是/是有更简单的方式来做到这一点?也许一个函数?我讨厌访问“私人”变量。另外,如果不设置此属性,我如何确定一行是否已被删除?他们仍然在技术上在数据库中,所以有一个标志?一个隐藏的列?也许有更多关于这个python模块或Visual Fox Pro知识的人有一些想法。

+1

在VFP方面,Deleted()将为当前表中的当前记录返回true或false。麻烦的是'当前'记录'和'当前表'的概念实际上是一个xBase的东西,并不一定转化为记录集方法。 – 2011-03-25 09:28:46

回答

0

停止我,如果你听说过这个人之前:“”,“我有一个DBF读取模块(pydbfrw),我一直想释放‘这些天“”

它’。”很容易添加你想要比通过dbf模块的源代码困扰的功能:

>>> import pydbfrw 
>>> d = pydbfrw.DBFreader('/devel/dbf/all_files/del.dbf') 
>>> list(d) 
[['fred', 1], ['harriet', 4]] 
>>> d.get_field_names() 
['NAME', 'AMT'] 
>>> d = pydbfrw.DBFreader('/devel/dbf/all_files/del.dbf', include_deleted=True) 
>>> list(d) 
[[False, 'fred', 1], [True, 'tom', 2], [True, 'dick', 3], [False, 'harriet', 4]] 
>>> d.get_field_names() 
['deleted__', 'NAME', 'AMT'] 
>>> for rowdict in d.get_dicts(): 
...  print rowdict 
... 
{'deleted__': False, 'name': 'fred', 'amt': 1} 
{'deleted__': True, 'name': 'tom', 'amt': 2} 
{'deleted__': True, 'name': 'dick', 'amt': 3} 
{'deleted__': False, 'name': 'harriet', 'amt': 4} 
>>> for rowtup in d.get_namedtuples(): 
...  print rowtup 
... 
Row(deleted__=False, name='fred', amt=1) 
Row(deleted__=True, name='tom', amt=2) 
Row(deleted__=True, name='dick', amt=3) 
Row(deleted__=False, name='harriet', amt=4) 
>>> 
+0

我的歉意。我对使用你的模块感到厌倦,因为我对它的了解不够。尽管如此,在记录时你可能会非常惊人。 – 2011-03-29 15:53:51

3

使用上面你想要的dbf module引用的是:

myDB.use_deleted = False 

个个人记录:

for record in myDB: 
    if record.has_been_deleted: 
     print "record %d is marked for deletion!" % record.record_number 

实际从表中删除记录:

myDB.pack() 

披露:我是作家。

+1

啊,我感谢你的意见。我觉得我已经掌握了这个模块,但是现在我正在和真正的专家交谈,未来我可能会为你提出一些问题。 – 2011-07-20 15:25:10