在我与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()
有人可以帮忙吗?