繁体   English   中英

连接表(1:多表关系)的正确 SQLAlchemy ORM 结构是什么?

[英]What is the proper SQLAlchemy ORM structure for a join table (1:multiple table relationship)?

我正在尝试创建一个连接表,以便:

Table A.b_id = Table B.id
AND
Table A.c_id = Table C.id

这样,我通过创建一个中间“连接”表来定义 B 和 C 之间的关系来保护空间。

下面是定义这个的正确方法吗? 我一直在查看文档,但它们只定义了 1:many 和 many:1 与示例的关系 - 我没有看到任何情况,例如我所描述的情况。 提前致谢!

class B(Base):

    __tablename__ = "b"

    id = Column(Integer, primary_key=True)


class C(Base):

    __tablename__ = "c"

    id = Column(Integer, primary_key=True)


class A(Base):

    __tablename__ = "a"

    id = Column(Integer, primary_key=True)
    b_id = Column(Integer, ForeignKey("b.id"))
    b = relationship("B")
    c_id = Column(Integer, ForeignKey("c.id"))
    c = relationship("C")

仅供任何展望未来的人参考。 我能够通过阅读文档来解决这个问题(谁会猜到?)。 正确的方法如下:

from sqlalchemy import Column, ForeignKey, Integer,
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship

Base = declarative_base()

class B(Base):

    __tablename__ = "b"

    id = Column(Integer, primary_key=True)
    a = relationship("A", back_populates("b"))


class C(Base):

    __tablename__ = "c"

    id = Column(Integer, primary_key=True)
    a = relationship("A", back_populates("c"))


class A(Base):

    __tablename__ = "a"

    id = Column(Integer, primary_key=True)
    b_id = Column(Integer, ForeignKey("b.id"))
    c_id = Column(Integer, ForeignKey("c.id"))

    b = relationship("B", foreign_keys=[b_id], back_populates("a"))
    c = relationship("C", foreign_keys=[c_id], back_populates("a"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM