【问题标题】:Python SQLAlchemy relationship set event hookPython SQLAlchemy 关系集事件挂钩
【发布时间】:2014-06-23 07:36:52
【问题描述】:

在 SQLAlchemy ORM 中,可以使用以下代码为所有表和列挂钩属性集事件:

@event.listens_for(Base, 'attribute_instrument')
def configure_listener(class_, key, inst):    
    if not hasattr(inst.property, 'columns'):
        return

    @event.listens_for(inst, "set", retval=True)
    def set_column_value(instance, value, oldvalue, initiator):
        column = inst.property.columns[0]
        # HOOK CODE
        logging.info("%s: %s -> %s" % (inst.property.columns[0], oldvalue, value))
        return value 

但这种方法不适合人际关系。作为关系的表属性不会通过此事件,而official guide 没有说明该关系的属性不会被事件处理。那么问题来了:SQLAlchemy 中是否有任何方法可以将事件与关系属性修改结合起来?

备注:我希望因为通过外键列与其他表链接的关系然后修改这个(外键)列会产生一个事件但我错了:只有当记录已经有有效的 Id,但否则(当对象尚未添加到数据库中时)未引发此事件。

【问题讨论】:

    标签: python orm sqlalchemy


    【解决方案1】:

    我认为现在 1.0 sqlalchemy 中有一个init_collection 事件

    http://docs.sqlalchemy.org/en/latest/orm/events.html#attribute-events

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-16
      • 1970-01-01
      • 2015-02-19
      • 2014-08-01
      • 1970-01-01
      • 2016-09-22
      • 2013-04-01
      • 1970-01-01
      相关资源
      最近更新 更多