Brightway2:Modifying/deleting 从 activity 交换而不使用 activity 作为字典
Brightway2: Modifying/deleting exchanges from activity without using activity as dict
我想修改 activity 的交易并将 activity 保存回数据库。
可以更改 activity 的其他方面,例如它的名称:
some_act['name'] = "some new name"
然后保存 activity :
some_act.save()
也可以用同样的方式修改交易所:
some_exc['scale"] = 0.5
然后保存交换:
some_exc.save()
但是,我发现从特定 activity 进行 add/delete 交换的唯一方法是通过 activity 的 dictionary version
:
some_act_dataset = some_act._data
some_act_dataset['exchanges'] = [{exchange1}, {exchange2}] # exc must be valid exchange dict
问题是我不知道如何将新的activity(作为字典)保存回数据库。
some_act_dataset.save()
不起作用,因为字典没有 save
方法。
Database("my_database").write(some_act_dataset)
覆盖数据库中的所有其他数据。
我可以在加载的数据库中工作:
loaded_db = Database("my_database").load()
并在生成的字典中进行我需要的更改,然后写入整个数据库,但是当数据库很大时,这似乎是一项代价高昂的操作。
所以,问题是:有没有一种方法可以修改activity的交换并将activity保存回数据库而不需要覆盖整个数据库?
活动和交流存储在 SQLite 数据库中的单独表中,并且每个表都有自己的对象。在进出数据库的旅程中,使用了几个翻译层:
但是,我们几乎总是使用 Activity
或 Exchange
对象。这里的重点是,因为活动和交流是两个单独的表,所以要分开对待。
要创建新的交易所,请使用 Activity.new_exchange()
:
In [1] from brightway2 import *
In [2]: act = Database("something").random()
In [3]: exc = act.new_exchange()
In [4]: type(exc)
Out[4]: bw2data.backends.peewee.proxies.Exchange
您还可以在 new_exchange
方法调用中指定数据属性:
In [5]: exc = act.new_exchange(amount=1)
In [6]: exc['amount']
Out[6]: 1
要删除 Exchange
,请调用 Exchange.delete()
。如果您正在进行大量数据操作,您可以直接对数据库执行 SQL,或者使用 ActivityDataset
或 ExchangeDataset
编写 peewee 查询(参见例如构建中构建的查询Exchanges
对象)。
我想修改 activity 的交易并将 activity 保存回数据库。
可以更改 activity 的其他方面,例如它的名称:
some_act['name'] = "some new name"
然后保存 activity :
some_act.save()
也可以用同样的方式修改交易所:
some_exc['scale"] = 0.5
然后保存交换:
some_exc.save()
但是,我发现从特定 activity 进行 add/delete 交换的唯一方法是通过 activity 的 dictionary version
:
some_act_dataset = some_act._data
some_act_dataset['exchanges'] = [{exchange1}, {exchange2}] # exc must be valid exchange dict
问题是我不知道如何将新的activity(作为字典)保存回数据库。
some_act_dataset.save()
不起作用,因为字典没有 save
方法。
Database("my_database").write(some_act_dataset)
覆盖数据库中的所有其他数据。
我可以在加载的数据库中工作:
loaded_db = Database("my_database").load()
并在生成的字典中进行我需要的更改,然后写入整个数据库,但是当数据库很大时,这似乎是一项代价高昂的操作。
所以,问题是:有没有一种方法可以修改activity的交换并将activity保存回数据库而不需要覆盖整个数据库?
活动和交流存储在 SQLite 数据库中的单独表中,并且每个表都有自己的对象。在进出数据库的旅程中,使用了几个翻译层:
但是,我们几乎总是使用 Activity
或 Exchange
对象。这里的重点是,因为活动和交流是两个单独的表,所以要分开对待。
要创建新的交易所,请使用 Activity.new_exchange()
:
In [1] from brightway2 import *
In [2]: act = Database("something").random()
In [3]: exc = act.new_exchange()
In [4]: type(exc)
Out[4]: bw2data.backends.peewee.proxies.Exchange
您还可以在 new_exchange
方法调用中指定数据属性:
In [5]: exc = act.new_exchange(amount=1)
In [6]: exc['amount']
Out[6]: 1
要删除 Exchange
,请调用 Exchange.delete()
。如果您正在进行大量数据操作,您可以直接对数据库执行 SQL,或者使用 ActivityDataset
或 ExchangeDataset
编写 peewee 查询(参见例如构建中构建的查询Exchanges
对象)。