我使用flask-sqlalchemy并且从我的数据库中检索一些数据组合时遇到以下问题。
假设我的数据库中的用户可以创建帖子,每个帖子都属于一个类别。现在,我想检索所有类别,并为每个类别检索给定用户的所有帖子。即使某个类别没有该用户的帖子,我仍然想要它。
这里有一些最小的代码:
class User(db.Model):
id = db.Column('id', db.Integer, primary_key=True)
name = db.Column(db.String(50), index=True, unique=True)
posts= db.relationship('Post', backref='user', lazy='dynamic')
class Category(db.Model):
id = db.Column(db.Integer, primary_key=True)
posts = db.relationship('Post', backref='category', lazy='dynamic')
class Post(db.Model):
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True)
category_id = db.Column(db.Integer, db.ForeignKey('category.id'), primary_key=True)
我想我需要一个外部联接过滤用户ID我正在寻找,所以我试过了:
from operator import and_
Category.query.outerjoin(Post, and_(Category.id == Post.category_id,
Post.user_id == current_user_id))
这执行了正常的外连接。无论用户如何,检索到的Category对象都包含其所有帖子。
我想过在查询后手动过滤结果。但是,如果我更改模型对象,SQLAlchemy理解它应该是一个更新语句,所以这不是一个好主意。对数据进行深层复制以进行过滤听起来像一个非常脏的解决方法。
感谢任何帮助。