SqlAlchemy使用联接查询两个类

时间:2019-11-18 22:07:42

标签: python flask sqlalchemy flask-sqlalchemy

在我与Users.taxonomy_id = Taxonomy.id结合的Flask应用程序中,我有两个类,如下所示:

class User(db.Model):

  __tablename__ = 'users'
  id = db.Column(db.Integer, primary_key=True)

  # Data.
  taxonomy_id = db.Column(db.Integer, db.ForeignKey('taxonomy.id',
                        onupdate='CASCADE', ondelete='CASCADE'),
                        index=True, nullable=False)

  role = db.Column(db.Enum(*ROLE, name='role_types', native_enum=False),
                 index=True, nullable=False, server_default='member')
  active = db.Column('is_active', db.Boolean(), nullable=False,
                   server_default='1')
  username = db.Column(db.String(24), unique=True, index=True)
  organisation = db.Column(db.String(255), index=True)
  email = db.Column(db.String(255), index=True, nullable=False,
                  server_default='')
  password = db.Column(db.String(128), nullable=False, server_default='')

  def __init__(self, **kwargs):
    super(User, self).__init__(**kwargs)

class Taxonomy(db.Model):
  __tablename__ = 'taxonomy'
  id = db.Column(db.Integer, primary_key=True)

  # Relationships.
  user = db.relationship(User, uselist=False, backref='taxonomy',
                       passive_deletes=True)

  # Data.
  taxonomy = db.Column(db.String(80), index=True, nullable=False)
  title = db.Column(db.String(80), index=True, nullable=False)
  description = db.Column(db.String(500), index=True, nullable=False,
                        server_default='')
  parent = db.Column(db.Integer, nullable=False, default=0)
  member_count = db.Column(db.Integer, nullable=False, default=0)

  def __init__(self, **kwargs):
    super(Taxonomy, self).__init__(**kwargs)

两者都可以很好地用于独立运行的查询,例如:

if form.validate_on_submit():
    current_user.username = request.form.get('username')
    current_user.save()

或者:

t = Taxonomy.query.filter(Taxonomy.id == current_user.taxonomy_id).first()

但是我很难让它们作为联合查询工作。我一直在使用不同的方法玩了一段时间,找不到能解决我的问题的确定的在线方法。我想基于这些类创建一个联合查询并返回结果。下面的方法有效,但仅返回来自Users类和表的数据,而不是从user类和分类类返回的数据:

records = User.query.join(
    Taxonomy, User.taxonomy_id == Taxonomy.id).filter(
    User.id == 102).first()

有人可以帮忙吗?

0 个答案:

没有答案