【问题标题】:Query a single table with relationship database Flask-SQLAlchemy使用关系数据库 Flask-SQLAlchemy 查询单表
【发布时间】:2019-10-16 21:45:23
【问题描述】:

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

我想使用以下选定过滤器查询所有用户: 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')

【问题讨论】:

    标签: python jquery json flask sqlalchemy


    【解决方案1】:
    session.query(User).filter(
    User.department.has(name='some_name)).filter(
    User.role.has(name='some_role')).filter(
    User.degree == 'some_degree')
    

    【讨论】:

      【解决方案2】:

      这是一个带有连接的简单查询。您可以使用部门过滤器修改“部门”,并使用相同的“角色”。您应该使用所需的字段修改选择部分 (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))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-10
        • 1970-01-01
        • 2019-04-09
        • 2018-08-22
        • 1970-01-01
        • 2019-05-04
        相关资源
        最近更新 更多