你可以试试:
class Comment(Base):
__tablename__ = 'comments'
id = Column(Integer, primary_key=True)
a_id = Column(Integer, ForeignKey('a.id'), nullable=True)
b_id = Column(Integer, ForeignKey('b.id'), nullable=True)
text = Column(UnicodeText, nullable=False)
def __init__(self, text):
self.text = text
它仍然是一种比较老套的方法,但它通过使用外键来保持引用完整性。
如果您想寻找存储表名的解决方案,您可以尝试以下方法:
class A(Base):
__tablename__ = 'as'
id = Column(Integer, primary_key=True)
name = Column(Unicode, nullable=False, unique=True)
comments = relationship("Comment",
primaryjoin="and_(A.id==Comment.id, "
"Comment.model=='A')")
def __init__(self, name):
self.name = name
class Comment(Base):
__tablename__ = 'comments'
id = Column(Integer, primary_key=True)
text = Column(UnicodeText, nullable=False)
model = Column(String(50), nullable=False)
def __init__(self, text):
self.text = text
我自己没有对此进行测试,因此如果您遇到问题,请查看指定备用连接条件或评论,我会做更多的研究。
有关该主题的深入解释,请参阅Mike Bayer 关于多态关联的博客条目