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'))
在这个例子中,aProperty
可能与许多ServiceArea
s 相关联,并且 aServiceArea
可能与许多属性相关联。但是,没有可供我用于关系的辅助表——这完全由ST_Contains
函数决定。
每当我运行此代码时,我都会收到一个sqlalchemy.exc.ArgumentError
异常,告诉我“确保引用列与 ForeignKey 或 ForeignKeyConstraint 相关联,或者在连接条件中使用 foreign() 注释进行注释。”
当我在foreign
周围添加ServiceArea.geom
(即使它不是外键)时,我收到一条错误消息,提示我“考虑使用 remote() 注释来准确标记连接条件中位于关系远程端的那些元素。”
我尝试过单独使用foreign
和remote
一起使用和(例如,foreign(remote(ServiceArea.geom))
和remote(foreign(ServiceArea.geom))
),但总是得到上述错误之一。我究竟做错了什么?