在SQLAlchemy

时间:2015-08-21 03:22:42

标签: python sqlalchemy flask-sqlalchemy

我使用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理解它应该是一个更新语句,所以这不是一个好主意。对数据进行深层复制以进行过滤听起来像一个非常脏的解决方法。

感谢任何帮助。

0 个答案:

没有答案