gpt4 book ai didi

python - 如何根据同一模型的其他两个列设置sqlalchemy中一列的值?

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

我正在构建一个网络应用程序。我有以下模型。

class Staff(db.Model):
id = db.Column(db.Integer, primary_key=True)
store_id = db.Column(db.Integer, db.ForeignKey('store.id'))
first_name = db.Column(db.String(64))
last_name = db.Column(db.String(64))
username = db.Column(db.String(64))
cell_phone = db.Column(db.Integer)
email = db.Column(db.String(64))
position = db.Column(db.String(64))
# add average salary value based on payroll

我希望用户名first_name+last_name,用户在表单中输入他的名字和姓氏。

我知道如何使用 @db.event.listens_for(Staff, "after_insert") 等并像这样更新它。但是有没有一种方法可以在模型中定义一些东西,这样它就可以在没有触发器的情况下自动完成?`

最佳答案

您应该熟悉 property 装饰器。

对于 SQLAlchemy,有 hybrid_property我强烈推荐学习和使用的扩展。看看这个例子:

from sqlalchemy.ext.hybrid import hybrid_property

class Staff(db.Model):
first_name = db.Column(db.String(64))
last_name = db.Column(db.String(64))

@hybrid_property
def username(self):
return self.first_name + self.last_name

文档显示了混合属性的这种用法:SQL Expressions as Mapped Attributes: Using a Hybrid .使用混合属性,您可以轻松地使用用户名 来查询您的模型,并且您不需要将数据存储在数据库中两次。通过一些额外的行,您应该能够 create update constructs在即将发布的 SQLAlchemy v1.2 中。

编辑:要明确说明 - 您也可以使用 column_property(如链接 documentation 中所述):

username = column_property(first_name + last_name)

它可能看起来更好但功能较弱(除其他外没有更新语句)。

附言。我敢打赌这是重复的,但我找不到相同的问题。

关于python - 如何根据同一模型的其他两个列设置sqlalchemy中一列的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45650408/

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