Как изменить и сохранить записи в файле dbf с помощью модуля python dbf? [Дубликат]

Попробуйте «py» вместо «python» из командной строки:

C: \ Users \ Cpsa> py Python 3.4.1 (v3.4.1: c0e311e010fc, 18 мая 2014, 10 : 38: 22) [MSC v.1600 32 бит (Intel)] на win32 Введите «помощь», «авторское право», «кредиты» или «лицензия» для получения дополнительной информации. >>>

6
задан blfuentes 7 March 2014 в 09:32
поделиться

1 ответ

dbf отличается от большинства других пакетов DB тем, что вместо получения полностью отдельной структуры данных (например, набор строк как кортежей) вы работаете непосредственно с самим файлом dbf.

Проблема, с которой я столкнулась, заключалась в том, что когда я обновлял сразу несколько полей:

record.name = 'Some Name'
record.age = current_year -birth_year
record.hair_color = base_color * sun_tint

, если ошибка произошла в любое время после первого поля, у меня была запись, которая была только частично обновлена, и потому что он больше не является внутренне непротиворечивым.

Чтобы обойти эту проблему, я добавил код, который является видом как фиксация на основе записи, а способ его активации - с with или с помощью Process:

with record:  # capture current values
    record.field1 = something
    record.field2 = something_else
    record.field3 = another_thing
# now some other code

Теперь, если произошла ошибка, исходные значения восстанавливаются; если ошибка не возникает, новые значения сохраняются в таблице dbf на диске.

Кроме with в записи, вы также можете использовать Process в связке записей, или вы могли бы избегайте проблемы и собирайте данные за пределами записи, а затем пишите все сразу:

for record in table:
    new_data = {}
    new_data['field1'] = 'a name'
    new_data['field2'] = an_age
    dbf.write(record, new_data)

Итак, чтобы вернуться к вашему коду, самый простой способ его исправить:

with dbf.Table("aa.dbf") as table:
    for record in dbf.Process(table):
        record[3] = 200
6
ответ дан Ethan Furman 22 August 2018 в 16:07
поделиться
  • 1
    круто, это очень мило. Спасибо, проблема решена. dbf - хорошая библиотека. – UnZike 10 March 2014 в 03:55
Другие вопросы по тегам:

Похожие вопросы: