如何在db.event.listens_for之后运行多个方法(MODEL,“在_....之后”)

时间:2017-07-17 15:05:30

标签: python sqlalchemy flask-sqlalchemy

您好我目前有一个使用db.event.listens_for()作为触发器的数据库模型。

例如

@db.event.listens_for(Order, "after_delete")
def update_table_status(mapper, connection, target):
    # print('Checking if the table contains orders')
    table = Tables.__table__
    orders = Order.query.filter_by(tables_id=target.tables_id).filter(Order.checkout_id == None).all()
    # print(orders)
    # print(target.tables_id)
    if len(orders) == 0:
        # print('No orders associated to the table.')
        connection.execute(table.update().where(table.c.id == target.tables_id).values(active=0))
        # firebase_table(target.store_id)
    else:
        # print('Orders still associated to the table.')
        connection.execute(table.update().where(table.c.id == target.tables_id).values(active=1))
        # firebase_table(target.store_id)

有没有办法将多个方法组合在一起并只使用一个装饰器来执行批处理操作?

一堂课可能吗?

@db.event.listens_for(Order, "after_delete")
class OrdersAfterDelete:
    def DOA(self):
        #do stuff

    def DOB(self):
        #do stuff

1 个答案:

答案 0 :(得分:1)

你可以尝试这样的事情:

@db.event.listens_for(Order, "after_delete")
class AfterDeleteListener(object):
    def __init__(self, *args, **kwargs):
        self.DOA(*args, **kwargs)

    def DOA(self, *args, **kwargs):
        # do stuff

这与我建议调用函数的函数基本相同,但你可以用这种方式将所有方法组合在一起。