gpt4 book ai didi

python - SQLAlchemy 上下文相关函数,用于在插入和更新时创建复合值

转载 作者:行者123 更新时间:2023-11-28 19:28:19 26 4
gpt4 key购买 nike

我正在尝试解决如何添加上下文敏感函数(例如 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']))

我不清楚如何引用两列(FirstName 和 LastName)现有数据来创建一个复合值来存储以便于检索。例如,如果我有一个名为 John Doe 的用户,get_user_full_name 方法应该采用“John”和“Doe”并返回“John Doe”的全名值。

documentation它指的是 context.current_parameters 但在我的情况下不存在。我怀疑这是因为我们使用了声明式方法。如果它确实有效,我的 get_user_full_name 函数将如下所示:

def get_user_full_name(context):
return " ".join((context.current_parameters['FirstName'],context.current_parameters['LastName']))

我知道这可能是微不足道的,但我似乎无法破解这些信息的存储位置以及如何动态访问它的代码。

如果有一点见解,我们将不胜感激。我也对更优雅的方法持开放态度。

提前致谢...

干杯,

保罗

最佳答案

以防万一有人正在寻找答案。

您可以使用 mapper-events

@event.listens_for(SomeMembers, 'before_insert')
def before_insert_function(mapper, connection, target):
target.FullName = f"{target.FirstName} {target.LastName}"

关于python - SQLAlchemy 上下文相关函数,用于在插入和更新时创建复合值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3648732/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com