4

SqlAlchemy 0.8.4 および GeoAlchemy2 0.2.2 を使用してフィールドに動的に入力しようとしています。目標は、データベースから読み込まれた施設の位置に基づいて地区を施設に割り当てることです。コードは次のようになります。

class District(Base):
    __tablename__ = 'districts'
    id = Column(Integer, primary_key=True)
    geom = Column('geog', Geometry(geometry_type='POLYGON'), nullable=False)

class Facility(Base):
    __tablename__ = 'facilities'
    id = Column(Integer, primary_key=True)
    pos = Column('geog', Geometry(geometry_type='POINT'), nullable=True)
    district = relationship(District,
                            viewonly=True,
                            primaryjoin="District.geom.ST_Contains(Facility.pos)",
                            foreign_keys=[District.id])

しかし、これにより次のエラーが発生します。

ArgumentError: リレーションシップ Facility.district のプライマリ結合条件 'ST_Contains(districts.geog, facility.geog)' に関連する外部キー列が見つかりませんでした。参照列が ForeignKey または ForeignKeyConstraint に関連付けられていること、または結合条件でforeign() 注釈が付けられていることを確認してください

地区は常に変化しているため、これらのクラス間に外部キー関係を持たないようにしたいのですが、データベースに再度クエリを実行せずに地区が設定された施設を取得したいと考えています。

これをどのように解決すればよいですか?

4

0 に答える 0