我想在两个具有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
函数决定。
每当我运行此代码时,我都会收到sqlalchemy.exc.ArgumentError
异常,告诉我“确保引用列与ForeignKey或ForeignKeyConstraint相关联,或者使用foreign()注释在连接条件中注释。“
当我在foreign
周围添加ServiceArea.geom
时(即使它不是外键),我收到错误提示我“考虑使用remote()注释来准确标记这些连接条件的元素位于关系的远程端。“
我已尝试单独使用foreign
和remote
以及一起使用(例如foreign(remote(ServiceArea.geom))
和remote(foreign(ServiceArea.geom))
),但总是会收回上述错误之一。我做错了什么?