Python + SQLAlchemy:如何在关系的对象字段之一更改后更新多对一关系?

Python + SQLAlchemy: how to update many-to-one relationship after one of relation's object field change?

我有三个 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 继承了 UnitRegion 包含单位列表和玩家列表。当我更改从单位继承的任何玩家字段时,该地区的 players 关系不会刷新。更改 Player 字段以刷新区域 players 与获取实际数据的关系后我该怎么办?

P.S。如果可能的话,我想避免额外保存到数据库,因为我需要先执行一些操作(比如计算等)。

区域的 players 关系完全基于从数据库中查询的对象,因此在更新数据库之前不会 "refresh"。

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()