如何查询共享至少一所大学的所有用户

时间:2019-05-21 23:12:16

标签: python python-3.x flask-sqlalchemy

我想查询所有共享至少一个相似属性/内容的用户(在这种情况下,是大学)。

models.py



class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True,
    nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
    password = db.Column(db.String(60), nullable=False) 
    colleges = db.relationship('College', backref='author',
    lazy=True)

    def __repr__(self):
        return "{}, {}, {}".format(self.username, self.email,
        self.image_file)



class College(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    content = db.Column(db.Text, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), 
    nullable=False)

    def __repr__(self):
        return "{}".format(self.content)

在终端中测试数据库

#after creating db
user_1 = User(username='name',
         email='example@demo.com',password='password')
db.session.add(user_1)
db.session.commit()
user = User.query.filter_by(username='name').first()
college_1 = College(content='College1', user_id=user.id)
college_2 = College(content="College2', user_id=user.id)
db.session.add(college_1)
db.session.add(college_2)
db.session.commit()


这时,我想查询所有至少包含一所学院的用户(在college_1或college_2之间)。因此,我想通过查询至少包含college_1或college_2的所有用户来返回user_1(以及我添加的其他用户)的ID。

我尝试了以下查询:

User.query.filter_by(colleges="Dartmorth").all()

但是它返回“无法将集合与对象或集合进行比较;” sqlalchemy.exc.InvalidRequestError:无法将集合与对象或集合进行比较;使用contains()测试成员资格。”

1 个答案:

答案 0 :(得分:0)

您无需查询User模型,而需要查询College一个:

colleges = College.query.filter_by(content="Dartmorth").all()

它应该返回College实例的列表,如果它不为空,则可以对其进行迭代并提取user_id:

user_0 = colleges[0].user_id