[英]sqlalchemy, mixins, foreignkeys and declared_attr
我知道在声明性mixin类中声明带有外键的列时我需要@declared_attr,但是我想知道这背后的原因。
谢谢 :)
#store traces
class ListContainer():
id = Column(Integer, primary_key=True)
# timestamp = Column(DateTime, default=datetime.now())
name = Column(String)
#endclass
#store flow in traces
def list_item(tablename):
class ListItem():
# @declared_attr
# def trace_id(cls):
# return Column(Integer, ForeignKey(tablename+'.id'))
trace_id = Column(Integer, ForeignKey(tablename+'.id'))
id = Column(Integer, primary_key=True)
item_pos = Column(Integer)
# start_ea = Column(BLOB)
# end_ea = Column(BLOB)
#endclass
return ListItem
每个模型必须具有唯一的orm属性。 如果mixin中的相同属性直接应用于每个子类,则它们都具有相同的属性。 基本orm属性的副本很容易创建,因为它们不引用任何其他orm属性。 对于更复杂的属性,使用@declared_attr
修饰的函数可确保为每个子类创建新实例。
在检测期间,SQLAlchemy为每个类调用每个声明的attr,并将结果分配给目标名称。 通过这种方式,它可以确保为每个子类唯一且正确地进行复杂映射。
请参阅文档 ,其中包含此declared_attr
示例:
from sqlalchemy.ext.declarative import declared_attr class ReferenceAddressMixin(object): @declared_attr def address_id(cls): return Column(Integer, ForeignKey('address.id')) class User(ReferenceAddressMixin, Base): __tablename__ = 'user' id = Column(Integer, primary_key=True) ```
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.