如何使用SQL函数与SQLAlchemy创建多对多关系?

时间:2016-06-24 05:24:00

标签: python flask sqlalchemy flask-sqlalchemy geoalchemy2

我想在两个具有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()注释来准确标记这些连接条件的元素位于关系的远程端。“

我已尝试单独使用foreignremote以及一起使用(例如foreign(remote(ServiceArea.geom))remote(foreign(ServiceArea.geom))),但总是会收回上述错误之一。我做错了什么?

0 个答案:

没有答案