用关系数据库Flask-SQLAlchemy查询单个表

时间:2019-05-31 08:53:17

标签: python jquery json flask sqlalchemy

我有三个表:用户,角色,部门

我想用以下过滤器查询所有用户: Department.name , Role.name and User.degree

我找不到解决此问题的方法,任何建议都很好!

这是我简化的模型:

class User(UserMixin, db.Model):

    __tablename__ = "users"

    id = db.Column(db.Integer, primary_key=True)
    password_hash = db.Column(db.String(128))
    degree = db.Column(db.String(20),default=None)
    department_id = db.Column(db.Integer, db.ForeignKey('departments.id'))
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))


class Department(db.Model):

    __tablename__ = "departments"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(sqlalchemy.types.NVARCHAR(100), unique=True)
    user = db.relationship('User', backref='department',
                                lazy='dynamic')

class Role(db.Model):

    __tablename__ = 'roles'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(sqlalchemy.types.NVARCHAR(100), unique=True)
    users = db.relationship('User', backref='role',
                                lazy='dynamic')

2 个答案:

答案 0 :(得分:1)

session.query(User).filter(
User.department.has(name='some_name)).filter(
User.role.has(name='some_role')).filter(
User.degree == 'some_degree')

答案 1 :(得分:1)

这是带有联接的简单查询。您可以使用部门过滤器修改“部门”,并使用“角色”进行修改。您应该使用所需的字段修改选择部分(session.query(User.id))。

users = (session.query(User.id).join(Department, Department.user == User.id).join(Role, Role.user == User.id).filter(Department.name=="department").filter(Role.name=="role").group_by(User.id))