Brightway2: Austausch von Aktivitäten ändern / löschen, ohne Aktivität als Diktat zu verwenden
Ich möchte den Austausch einer Aktivität ändern und die Aktivität wieder in der Datenbank speichern.
Es ist möglich, andere Aspekte der Aktivität zu ändern, beispielsweise den Namen:some_act['name'] = "some new name"
und speichern Sie dann die Aktivität mit:some_act.save()
Es ist auch möglich, den Austausch auf die gleiche Weise zu ändern:some_exc['scale"] = 0.5
und speichere dann den Austausch mit:some_exc.save()
Der einzige Weg, den ich gefunden habe, um Austausche zu einer bestimmten Aktivität hinzuzufügen / daraus zu entfernen, besteht darin, das @ zu durchlaufedictionary version
der Aktivität:
some_act_dataset = some_act._data
some_act_dataset['exchanges'] = [{exchange1}, {exchange2}] # exc must be valid exchange dict
Das Problem ist, dass ich nicht weiß, wie ich die neue Aktivität (als Diktat) wieder in der Datenbank speichern kann.some_act_dataset.save()
funktioniert nicht, da Wörterbücher kein @ habsave
Methode.Database("my_database").write(some_act_dataset)
überschreibt alle anderen Daten in der Datenbank.
Ich könnte in der geladenen Datenbank arbeiten:loaded_db = Database("my_database").load()
und nehmen Sie die erforderlichen Änderungen im resultierenden Wörterbuch vor und schreiben Sie dann die gesamte Datenbank. Wenn die Datenbanken jedoch groß sind, scheint dies eine kostspielige Operation zu sein.
So lautet die Frage: Gibt es eine Möglichkeit, die Austausche einer Aktivität zu ändern und die Aktivität wieder in der Datenbank zu speichern, ohne die gesamte Datenbank überschreiben zu müssen?