Geo*_*lis 3 python sqlalchemy flask-sqlalchemy
我正在构建一个 Web 应用程序。我有以下型号。
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
Run Code Online (Sandbox Code Playgroud)
我想要的username是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
Run Code Online (Sandbox Code Playgroud)
文档显示了混合属性的这种用法:SQL Expressions as Mapped Attributes: Using a Hybrid。使用混合属性,您可以轻松地使用用户名来查询模型,并且不需要在数据库中存储两次数据。通过添加几行代码,您应该能够在即将发布的 SQLAlchemy v1.2 中创建更新结构。
编辑:要明确说明 - 您也可以使用column_property(如链接文档中所述):
username = column_property(first_name + last_name)
Run Code Online (Sandbox Code Playgroud)
这可能看起来更好但功能较弱(除其他外没有更新语句)。
附注。我敢打赌这是重复的,但我找不到相同的问题。
| 归档时间: |
|
| 查看次数: |
2770 次 |
| 最近记录: |