在SQLAlchemy中按关系过滤

时间:2016-04-25 23:32:26

标签: python postgresql filter sqlalchemy

所以,情况就是这样。我有一个多对多的用户和文件领域。这是基本代码:

owners_datasets = db.Table(
    'owners_datasets',
    db.Column('user_id', db.Integer(), db.ForeignKey(
        'user.id', ondelete='CASCADE')),
    db.Column('dataset_id', db.Integer(), db.ForeignKey(
        'dataset.id', ondelete='CASCADE'))
)

class User(UserJsonSerializer, UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    ...

class Dataset(DatasetJsonSerializer, db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    ...
    owners = db.relationship(
        'User',
        secondary=owners_datasets,
        backref=db.backref('collections', lazy='dynamic')
    )

我的目标是在Dataset对象和User对象之间建立关系。稍后我想查询当前用户在所有者列表中的数据集。由于这是一个多对多映射,我正在寻找类似contains()查询的东西,但我似乎无法找到任何东西。这是我到目前为止所得到的:

datasets = Dataset.query.filter_by(Dataset.owners.any(current_user))

返回错误:

AttributeError: 'User' object has no attribute '_annotate'

我无法找到任何关于此错误的引用,我不确定如何继续这里。

使用postgres 9.3

1 个答案:

答案 0 :(得分:2)

Dataset.query.filter(Dataset.owners.any(User.id==current_user.id))