Python SQLAlchemy列值基于另一个

Python SQLAlchemy列值基于另一个,python,sqlalchemy,Python,Sqlalchemy,我想知道在SQLAlchemy中是否可以基于同一个表中的其他值来计算列值 以下是我的例子: from uuid import uuid4 from datetime import datetime from sqlalchemy import Column, String, DateTime, UniqueConstraint from sqlalchemy.ext.declarative import declarative_base Base = declarative_base()

我想知道在SQLAlchemy中是否可以基于同一个表中的其他值来计算列值

以下是我的例子:

from uuid import uuid4
from datetime import datetime

from sqlalchemy import Column, String, DateTime, UniqueConstraint
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()


def generate_uuid():
    return str(uuid4())


class User(Base):
    __tablename__ = 'users'
    __table__args__ = (UniqueConstraint('username', 'email_address', 'phone'),)

    user_id = Column(String(36), primary_key=True, unique=True, default=generate_uuid)
    username = Column(String(15), nullable=False)
    password = Column(String(25), nullable=False)

    email_address = Column(String(255), nullable=False)
    phone = Column(String(20), nullable=False)

    hash = Column(String(128), nullable=False, unique=True)

    created_on = Column(DateTime(), default=datetime.utcnow)
    updated_on = Column(DateTime(), default=datetime.utcnow, onupdate=datetime.utcnow)
我想要实现的是,只要修改(更新)了
用户名
电子邮件地址
电话
,就可以重新计算
哈希


这是否可以使用
sqlalchemy.event.listen\u获得
?如果是,当哈希依赖于多个列时是否可以使用它?

您可以在sqlalchemy中使用映射器事件

在\u更新之前在\u插入之前结束,然后您可以在之前编辑实例:)

例:


您可以在sqlalchemy中使用映射器事件

在\u更新之前在\u插入之前结束,然后您可以在之前编辑实例:)

例:

def before_insert_function(mapper, connection, target):
    # 'target' is your object
    print(target.user_id )
    print(target.password)
    target.hash = "Other"
event.listen(User, 'before_insert', before_insert_function)
@event.listens_for(User, 'before_update')
def before_insert_function(mapper, connection, target):
        # 'target' is your object
        print(target.user_id )
        print(target.password)
        target.hash = "Other"