列を持つ 2 つのモデル間の関係を作成したいと考えていGeometry
ます。例えば:
from geoalchemy2.types import Geometry
from flask.ext.sqlalchemy import SQLAlchemy
from myapp import app
db = SQLAlchemy(app)
class Property(db.Model):
id = db.Column(db.Integer, primary_key=True)
street_address = db.Column(db.Text)
geom = db.Column(Geometry(geometry_type='POINT'))
service_areas = db.relationship(
'ServiceArea',
primaryjoin='ServiceArea.geom.ST_Contains(Geocode.geom)',
lazy='joined',
uselist=True,
viewonly=True,
)
class ServiceArea (db.Model):
name = db.Column(db.Text)
value = db.Column(db.Text)
geom = db.Column(Geometry(geometry_type='MULTIPOLYGON'))
この例では、Property
は多くServiceArea
の に関連付けられているServiceArea
可能性があり、 は多くのプロパティに関連付けられている可能性があります。ただし、リレーションシップに使用するセカンダリ テーブルはありません。すべてST_Contains
関数によって決定されます。
このコードを実行するたびに、「参照列が ForeignKey または ForeignKeyConstraint に関連付けられていること、または結合条件でforeign() 注釈が付けられていることを確認してください」sqlalchemy.exc.ArgumentError
という例外が表示されます。
(外部キーではありませんが)を追加するとforeign
、「remote() アノテーションを使用して、関係のリモート側にある結合条件の要素を正確にマークすることを検討してください」というエラーが表示されます。ServiceArea.geom
foreign
and をremote
別々に、または一緒に (たとえば、foreign(remote(ServiceArea.geom))
and )使用しようとしましremote(foreign(ServiceArea.geom))
たが、常に上記のエラーのいずれかが返されます。私は何を間違っていますか?