根据 SQLAlchemy 中的其他列计算列的值?

Gau*_*ani 5 python mysql sqlalchemy python-3.x

我在 Python 代码库中使用 SQLAlchemy 作为 ORM,以便能够与 MySQL 数据库连接。我希望能够根据同一行其他列中的值自动计算并在列中插入一个值。

这就是我的班级的样子:

class SentNotification(Base):
    __tablename__ = 'sent_notification'

    campaign = Column(VARCHAR(34), nullable=False)
    alert_type = Column(VARCHAR(34), nullable=False)
    identifier = Column(VARCHAR(34), nullable=False)
    message_params = Column(JSON, nullable=True)
    send_time = Column(Integer, nullable=False)
    nonce = Column(VARCHAR(32), nullable=False, primary_key=True)
Run Code Online (Sandbox Code Playgroud)

nonce列应该是campaignalert_type和(json 转储) 的 md5 哈希(identifier或任何其他自定义函数) message_params

显然,我可以单独计算它并使用 进行调用SentNotificationnonce但如果我只能传递前 5 个值,并且我的类将自动处理 的计算和插入,那么它会更干净nonce

注意:我不想使用混合属性,因为它会计算值,并且我想实际将其保留nonce在数据库中。

小智 0

这是关于上下文相关的默认函数。你可以将它用作:

def mydefault(context):
    params = context.get_current_parameters()
    return hash(params['campaign'],params['alert_type'],params['identifier'], params['message_params'])

class SentNotification(Base):
    __tablename__ = 'sent_notification'

    campaign = Column(VARCHAR(34), nullable=False)
    alert_type = Column(VARCHAR(34), nullable=False)
    identifier = Column(VARCHAR(34), nullable=False)
    message_params = Column(JSON, nullable=True)
    send_time = Column(Integer, nullable=False)
    nonce = Column(VARCHAR(32), nullable=False, primary_key=True, default=mydefault)
Run Code Online (Sandbox Code Playgroud)