首页 > 解决方案 > SqlAlchemy 计数表关系

问题描述

我在这里有一个班级用户,他们可以喜欢和不喜欢其他用户发布的帖子。我有一张表格来跟踪用户对帖子的好恶,如下所示:

class Users(db.Model):
    id = db.Column("id", db.Integer, primary_key=True)
    name = db.Column(db.String(100))
    email = db.Column(db.String(100))
    password = db.Column(db.String(100))
    status = db.Column(db.String(100))
    about = db.Column(db.String(500))
    liked = db.relationship(
        'PostLike',
        foreign_keys='PostLike.user_id',
        backref='user', lazy='dynamic')

    def like_post(self, post):
        if not self.has_liked_post(post):
            like = PostLike(user_id=self.id, post_id=post.id)
            db.session.add(like)

    def unlike_post(self, post):
        if self.has_liked_post(post):
            PostLike.query.filter_by(
                user_id=self.id,
                post_id=post.id).delete()

    def has_liked_post(self, post):
        return PostLike.query.filter(
            PostLike.user_id == self.id,
            PostLike.problem_id == post.id).count() > 0

    def __init__(self, name, email, password, status):
        self.name = name
        self.email = email
        self.password = password
        self.status = status
        self.about = "Nothing so far..."
        self.liked_posts = ""


class Problem(db.Model):
    id = db.Column("id", db.Integer, primary_key=True)
    title = db.Column(db.String(100))
    contents = db.Column(db.String(700))
    author_id = db.Column(db.Integer)
    time = db.Column(db.DateTime)

    def __init__(self, title, contents, author_id):
        self.title = title
        self.contents = contents
        self.author_id = author_id
        self.time = datetime.now()


class PostLike(db.Model):
    __tablename__ = 'post_like'
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    problem_id = db.Column(db.Integer, db.ForeignKey('problem.id'))

一些代码来自此堆栈帖子:如何在 Python Flask 中实现类似按钮功能来发布帖子?

现在我想做的是通过数据库计算给定帖子的喜欢数量。我看了这个:Counting Relations in SQLAlchemy但我不知道 func 和 core 是什么意思,所以有人有我可以使用的解决方案吗?

标签: pythonflasksqlalchemy

解决方案


推荐阅读