SqlAlchemy + fastApi试图连接多对多表



第一张表"release_name";

| | |名称代码

|:---|:--:|

——| | | 1>

| 2 | |…

第二表"release_value"| | |名称代码

|:---|:--:|

——| | | 1>

| 2 | |…

第3个表是用来连接上面2个表的"release_code_name":

| release_name_code | release_value_code |

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

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

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

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

我使用SQLAlchemy与FastApi。我需要做的是将两个表连接到一个由第三个映射表。

我所尝试的并没有打印出我需要的内容:

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不接受字符串,而是包含您的Table的变量:

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。你想链接你的列到表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),

最新更新