通过中间的 sqlalchemy 关系 table
sqlalchemy relationship through an intermediate table
我有三个相关的类:Parent、Child、SubChild。在这两种情况下,这种关系都是一对多的。我已将其设置为 child.parent
正确引用,当然 sub_child.child.parent
也能正常工作。
问题是我实际上从来不需要知道 sub_child.child
,但我确实需要知道 sub_child 的最终父级。我想建立一个关系,这样 sub_child.parent
将 return 对最终父对象的引用。
这可能吗,还是一个坏主意?我已阅读文档,但没有看到太多看起来有希望的内容。
我在 mysql 上使用 python2 和 sqlalchemy orm 作为后端。
看看http://docs.sqlalchemy.org/en/latest/orm/nonstandard_mappings.html
使用此方法,您应该能够在您提到的三个表上创建映射,并将参与表的列作为属性分配给映射 class。
metadata = MetaData()
parent = Table('parent', metadata,
Column('id', Integer, primary_key=True),
Column('child', Integer, ForeignKey('child.id')),
)
child = Table('child', metadata,
Column('id', Integer, primary_key=True),
Column('subchild', Integer, ForeignKey('subchild.id')),
)
subchild = Table('subchild', metadata,
Column('id', Integer, primary_key=True),
Column('some_column', String),
)
joined = join(parent, child, subchild)
Base = declarative_base()
class Parent(Base):
__table__ = joined
id = column_property(parent.c.id, child.c.id, subchild.c.id)
subchild_attr = subchild.c.some_column
我有三个相关的类:Parent、Child、SubChild。在这两种情况下,这种关系都是一对多的。我已将其设置为 child.parent
正确引用,当然 sub_child.child.parent
也能正常工作。
问题是我实际上从来不需要知道 sub_child.child
,但我确实需要知道 sub_child 的最终父级。我想建立一个关系,这样 sub_child.parent
将 return 对最终父对象的引用。
这可能吗,还是一个坏主意?我已阅读文档,但没有看到太多看起来有希望的内容。
我在 mysql 上使用 python2 和 sqlalchemy orm 作为后端。
看看http://docs.sqlalchemy.org/en/latest/orm/nonstandard_mappings.html
使用此方法,您应该能够在您提到的三个表上创建映射,并将参与表的列作为属性分配给映射 class。
metadata = MetaData()
parent = Table('parent', metadata,
Column('id', Integer, primary_key=True),
Column('child', Integer, ForeignKey('child.id')),
)
child = Table('child', metadata,
Column('id', Integer, primary_key=True),
Column('subchild', Integer, ForeignKey('subchild.id')),
)
subchild = Table('subchild', metadata,
Column('id', Integer, primary_key=True),
Column('some_column', String),
)
joined = join(parent, child, subchild)
Base = declarative_base()
class Parent(Base):
__table__ = joined
id = column_property(parent.c.id, child.c.id, subchild.c.id)
subchild_attr = subchild.c.some_column