[英]Trying to add a record to tables with many-to-many relationship using POST - FastAPI + SQLalchemy
[英]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.