繁体   English   中英

SqlAlchemy + fastApi 试图加入多对多表

[英]SqlAlchemy + fastApi trying to join many - to - many tables

第一个表“release_name”:

|代码|名称|

|:---|:--:|

|1---|一些|

|2---|任意 |

...

第二个表“release_value”:|代码|名称|

|:---|:--:|

|1---|一些|

|2---|任意 |

...

3rd 是在“release_code_name”上方连接 2 个表的表:

|release_name_code|release_value_code|

|:----------------|:----------------:|

|1----------------|2-----------------|

|1----------------|2-----------------|

|2----------------|3-----------------|

我将 SQLAlchemy 与 FastApi 一起使用。 我需要做的是将 2 个表连接到 3 个映射表中。

我尝试过的并没有打印出我需要的东西:

Link = Table(
    "release_code_name",
    Base.metadata,
    Column("release_name_code", Integer, ForeignKey("release_name_code.code"), primary_key=True),
    Column("release_value_code", Integer, ForeignKey("release_value_code.code"), primary_key=True),
    PrimaryKeyConstraint("release_name_code", "release_value_code")
)



class ReleaseNames(Base):
    __tablename__="release_name"

    code = Column(Integer, primary_key=True)
    name = Column(String, unique=True, nullable=False)
    build_name = relationship("BuildNames", secondary="release_code_name", back_populates="release_name")

class BuildNames(Base):
    __tablename__ = "release_value"

    code = Column(Integer, primary_key=True)
    name = Column(String, unique=True, nullable=False)
    release_name = relationship(ReleaseNames, secondary="release_code_name", back_populates="build_name")

@router.get("/")
async def build_names_by_release(release_name: str, db: Session = Depends(get_database_session)):
   result = db.query(ReleaseNames).join(BuildNames, ReleaseNames.build_name)
   return result

我想我在控制器功能中加入表格时遇到问题。

在您的relationship中, secondary不采用字符串,而是包含您的表的变量:

build_name = relationship("BuildNames", secondary=Link, back_populates="release_name")
release_name = relationship("ReleaseNames", secondary=Link, back_populates="build_name")

在创建表时,在ForeignKey中,您传递了错误的参数。 事实上,你给了它release_name_code.code而不是release_name.code 您希望将您的 Column 链接到 Table release_name而不是您的列release_name_code (您现在正在创建)。

release_name_code是您正在创建的列的名称。 release_name是您的表ReleaseNames

所以替换你的表的 ForeignKey 如下:

Column("release_name_code", Integer, ForeignKey("release_name.code"), primary_key=True),
Column("release_value_code", Integer, ForeignKey("release_value.code"), primary_key=True),

暂无
暂无

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

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