dbf
unterscheidet sich von den meisten anderen DB-Pakete, dass stattdessen eine völlig separate Datenstruktur zu bekommen (ein paar Zeilen als Tupel, zum Beispiel) Sie arbeiten direkt mit der dbf-Datei selbst.
Das Problem, das ich mich in Laufen fand, war, dass, wenn ich mehrere Felder auf einmal aktualisieren würde:
record.name = 'Some Name'
record.age = current_year -birth_year
record.hair_color = base_color * sun_tint
, wenn ein Fehler jederzeit nach dem ersten Feld passiert hatte ich einen Datensatz, der nur teilweise aktualisiert wurde, und daher nicht mehr intern konsistent.
um dieses Problem zu bekommen ich Code hinzugefügt, die es Art von ist auf einer Basis pro Datensatz anwenden wollen, und die Art und Weise zu aktivieren es mit with
oder mit Process
ist:
with record: # capture current values
record.field1 = something
record.field2 = something_else
record.field3 = another_thing
# now some other code
Nun, wenn Ein Fehler tritt auf, die ursprünglichen Werte werden wiederhergestellt. Wenn kein Fehler auftritt, werden die neuen Werte in der Tabelle dbf
auf dem Datenträger gespeichert.
Neben with
auf einem Datensatz, können Sie auch Process
auf einer Reihe von Aufzeichnungen verwenden, oder Sie könnten das Problem vermeiden und Ihre Daten außerhalb des Datensatz sammeln und schreiben sie dann alle auf einmal:
for record in table:
new_data = {}
new_data['field1'] = 'a name'
new_data['field2'] = an_age
dbf.write(record, new_data)
So , um zu Ihrem Code zurückzukehren, der einfachste Weg, um es zu beheben ist wahrscheinlich:
with dbf.Table("aa.dbf") as table:
for record in dbf.Process(table):
record[3] = 200
Ist die Einrückung, wie wir es richtig sehen? –
aktualisiert noch.sorry. – UnZike