FastAPI 中的 SQLModel:NoForeignKeysError

问题描述 投票:0回答:1

我单独创建了一个 Postgresql 数据库,其中包含名为“geog”的模式和两个名为投影(id、epsg_code、unit_id)和单位(id、name)的表。

所以在我的代码中我有:

  • 单位.py
...
class Unit(SQLModel, table=True):
    __tablename__ = "units"
    metadata = {schema="geog"}

    id: Optional[int] = Field(primary_key=True)
    name: str
    projections: List["Projection"] = Relationship(back_populates="units")
  • 投影.py
...
class Projections(SQLModel, table=True):
    __tablename__ = "projections"
    metadata = {schema="geog"}

    id: Optional[int] = Field(primary_key=True)
    epsg_code: str
    unit_id: int = Field(foreign_key="units.id")
    units: Optional["Unit"] = Relationship(back_populates="projections")

在数据库中我手动声明:

  • 在单位表中:
    • pk_units 作为与units.id col 相关的pk
  • 在预测表中:
    • pk_projections 作为与projections.id col 相关的pk
    • fk_projections_units_unit_id 作为与projections.unit_id 和units.id 相关的fk

但是每次我使用 CRUD(无论什么功能)时,都会出现以下错误:

sqlalchemy.exc.NoForeignKeysError: Could not determine join condition between parent/child tables on relationship Projection.units - there are no foreign keys linking these tables.  Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify a 'primaryjoin' expression.


编辑

似乎是返回类型引发了错误。连接似乎返回一个元组而不是单个类。我会调查这个,但如果有人有其他线索,我很感兴趣!

python foreign-keys fastapi sqlmodel
1个回答
0
投票

你有一个错误。当您使用单数字段

Projections
时,
unit_id
表不能与其父表具有数组关系。 对于多对多关系,您需要一个数据透视表。 因此,为了解决这个问题,
Projections
类的最后一行应该是:

unit: Unit | None = Relationship(back_populates="projections")

你应该在

Unit
课上改变:

projections: List["Projection"] = Relationship(back_populates="unit")
© www.soinside.com 2019 - 2024. All rights reserved.