我正在尝试弄清楚如何添加一个上下文相关函数(例如 def get_user_full_name()),该函数将从列的默认和 onupdate 规范中触发。我正在尝试设置一个复合字段,将名字和姓氏组合成一个全名值,以避免在所有查询中不断地连接这两个字段。
我正在使用声明性方法。这是一个类似模型的例子:
class SomeMembers(Base):
__tablename__ = 'some_members'
__table_args__ = {'mysql_engine':'InnoDB'}
SomeGroup = Column(Unicode(50), primary_key=True)
UserID = Column(Unicode(50), primary_key=True)
FullName = Column(Unicode(255), default=get_user_full_name, onupdate=get_user_full_name, index=True)
FirstName = Column(Unicode(255), index=True)
LastName = Column(Unicode(255), index=True)
UserName = Column(Unicode(255))
这是我编写的函数,它在堆栈跟踪中报告 FirstName 或 LastName 键均无效:
def get_user_full_name(context):
return " ".join((context.compiled_parameters[0]['FirstName'],context.compiled_parameters[0]['LastName']))
我不清楚如何引用现有数据的两列(名字和姓氏)来创建一个复合值来存储以便于检索。例如,如果我有一个名为 John Doe 的用户,get_user_full_name 方法应该采用“John”和“Doe”并返回“John Doe”的全名值。
在文档中它指的是 context.current_parameters 但在我的情况下不存在。我怀疑这是因为我们使用了声明性方法。如果它确实有效,我的 get_user_full_name 函数将如下所示:
def get_user_full_name(context):
return " ".join((context.current_parameters['FirstName'],context.current_parameters['LastName']))
我知道这可能是微不足道的,但我似乎无法破解有关此信息存储位置以及如何动态访问它的代码。
一点见解将不胜感激。我也对更优雅的方法持开放态度。
提前致谢...
干杯,
保罗