感谢van和使用继承,如果可以帮助其他任何人,这是我的解决方案:
from sqlalchemy import ( Column, Integer, Text, ForeignKey,)from sqlalchemy.orm import ( scoped_session, sessionmaker, relationship, backref,)import uuidfrom sqlalchemy.ext.declarative import declarative_basefrom zope.sqlalchemy import ZopeTransactionExtensionDBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))base = declarative_base()class Node(base): """ An object representing a node in the hierarchy. All the other objects inherit from Node. """ def getID(): return uuid.uuid1().hex __tablename__ = 'Node' ID = Column(Text, primary_key=True, default=getID) ParentID = Column(Text, ForeignKey('Node.ID')) type = Column(Text(50)) Children = relationship("Node", backref=backref('Parent', remote_side=[ID], uselist=False) ) __mapper_args__ = { 'polymorphic_identity':'Node', 'polymorphic_on':type } class A(Node): __tablename__ = 'A' ID = Column(Text, ForeignKey('Node.ID'), primary_key=True) __mapper_args__ = { 'polymorphic_identity':'A', }class B(Node): __tablename__ = 'B' ID = Column(Text, ForeignKey('Node.ID'), primary_key=True) __mapper_args__ = { 'polymorphic_identity':'B', }class C(Node): __tablename__ = 'C' ID = Column(Text, ForeignKey('Node.ID'), primary_key=True) __mapper_args__ = { 'polymorphic_identity':'C', }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)