2011-03-24 69 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

相關問題