我单独创建了一个 Postgresql 数据库,其中包含名为“geog”的模式和两个名为投影(id、epsg_code、unit_id)和单位(id、name)的表。
所以在我的代码中我有:
...
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")
...
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")
在数据库中我手动声明:
但是每次我使用 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.
似乎是返回类型引发了错误。连接似乎返回一个元组而不是单个类。我会调查这个,但如果有人有其他线索,我很感兴趣!
你有一个错误。当您使用单数字段
Projections
时,unit_id
表不能与其父表具有数组关系。 对于多对多关系,您需要一个数据透视表。
因此,为了解决这个问题,Projections
类的最后一行应该是:
unit: Unit | None = Relationship(back_populates="projections")
你应该在
Unit
课上改变:
projections: List["Projection"] = Relationship(back_populates="unit")