我正在使用 SQLAlchemy 开发一个 Python 项目。我有以下课程(我省略了一些与问题无关的方法):
class Cmd(Base):
__tablename__ = "commands"
dbid = Column(Integer, Sequence("commands_seq"), primary_key = True)
cmd_id = Column(SmallInteger)
instance_dbid = Column(Integer, ForeignKey("instances.dbid"))
type = Column(String(20))
__mapper_args__ = {
"polymorphic_on" : type,
"polymorphic_identity" : "Cmd"
}
def __init__(self, cmd_id):
self.cmd_id = cmd_id
self.cmd_name = event_names[self.cmd_id]
如您所见,在初始化类的实例时,属性是使用列表cmd_name
从属性创建的(也省略了,它是一个包含命令名称的简单列表)。cmd_id
event_names
我创建对象Cmd
,添加它会话,提交会话。关闭应用程序并再次启动后,我尝试Cmd
使用 SQLAlchemy 查询加载它。该对象被加载,但当然__init__
没有被调用,cmd_name
也没有被设置。
我想知道在通过查询self.cmd_name = event_names[self.cmd_id]
获取Cmd
对象后是否有一些简单的方法可以执行一些代码()。当然我可以做一个特殊的方法,总是在查询后启动它,但我正在寻求更优雅、更自动的方式。
我已经阅读了文档并找到了一些有关 ORM 事件侦听器的信息,但对于这种简单的情况来说,它们似乎太多了。我还找到了有关属性事件的文章,但它们只能与它们一起column_property
使用relationship
。是否有任何简短而优雅的方式来实现我想要的?