3

Visual fox Proデータベース(.dbfファイル)を使用していて、dbfpythonモジュールを使用しています。ここに例があります:

myDb = VfpTable('table.dbf');

これで、次のようにして、削除されたアイテムを除外できます。

myDb._use_deleted = None; 

私の質問は、これを行うためのより簡単な方法はありますか?多分関数?「プライベート」変数にアクセスするのは嫌いです。また、このプロパティを設定せずに、行が削除されたかどうかを確認するにはどうすればよいですか?それらはまだ技術的にデータベースにあるので、フラグはありますか?隠された列?たぶん、このpythonモジュールまたはVisualFoxProの知識が豊富な人がいくつかのアイデアを持っています。

4

2 に答える 2

4

上記で参照されているdbfモジュールを使用すると、次のようになります。

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()

開示:私は著者です。

于 2011-07-13T16:10:49.093 に答える
0

これを以前に聞いたことがある場合は、止めてください: "" "私は「最近の1つ」をリリースするつもりだった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)
>>>
于 2011-03-25T03:25:54.443 に答える