我有三个declarative_base模型。
class Region(BaseModel):
id = BaseModel.column(type='integer', primary_key=True)
# ...
y1 = BaseModel.column(type='float')
y2 = BaseModel.column(type='float')
x1 = BaseModel.column(type='float')
x2 = BaseModel.column(type='float')
map_id = BaseModel.column(type='mediumint')
units = relationship('Unit', primaryjoin="and_((Region.id == Unit.region_id), (Unit.unit_template_id))")
players = relationship('Player', lazy='subquery')
class Unit(BaseModel):
# ...
region_id = Object.column(type='integer',
foreign_key=db_name + '.region.id',
nullable=True)
region = relationship('Region', lazy='subquery')
class Player(Unit):
# ...
unit = relationship('Unit', lazy='subquery')
如您所见,Player
继承了Unit
。 Region
包含单位列表和玩家列表。当我更改任何从单位继承的玩家字段时,该区域的players
关系不会刷新。更改Player
字段以刷新区域players
与实际数据之间的关系后应该怎么办?
P.S。如果可能的话,我想避免额外保存到数据库,因为我需要先执行一些操作(例如计算等)。
答案 0 :(得分:1)
该区域的players
关系完全基于从数据库查询的对象,因此在更新数据库之前,它不会“刷新”。
db.session.commit()
# now region.players is up to date
如果您确实关心性能,则可以在内存中使用 Player
对象执行任何操作,然后再保存到数据库。
players_list = region.players
players_list[0].field = "new value"
# now players_list is up to date while region.players is not
do_calculations(players_list)
# save to db after all calculations are done
db.session.commit()