Visual Fox Pro и Python - PullRequest
       44

Visual Fox Pro и Python

3 голосов
/ 24 марта 2011

Я работаю с базой данных Visual Fox Pro (файл .dbf) и использую модуль Python dbf. Вот пример:

myDb = VfpTable('table.dbf');

Теперь я могу исключить удаленные элементы, выполнив следующие действия:

myDb._use_deleted = None; 

У меня вопрос (а): есть ли более простой способ сделать это? Может быть, функция? Я ненавижу доступ к "частным" переменным. Кроме того, без установки этого свойства, как я могу определить, была ли удалена строка? Технически они все еще находятся в базе данных, так есть ли флаг? Скрытый столбец? Может быть, кто-то с большим знанием этого модуля Python или Visual Fox Pro есть идеи.

Ответы [ 2 ]

4 голосов
/ 13 июля 2011

Используя модуль 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()

раскрытие: я автор.

0 голосов
/ 25 марта 2011

Остановите меня, если вы слышали это раньше: "" "У меня есть модуль чтения 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)
>>>
...