gpt4 book ai didi

python - SQLAlchemy按多对多关系排序

转载 作者:IT老高 更新时间:2023-10-28 22:18:03 31 4
gpt4 key购买 nike

这是我当前模型的简化示例(我使用的是 Flask SQLAlchemy extension):

like = db.Table(
'like',
db.Column('uid', db.Integer, db.ForeignKey('users.id')),
db.Column('pid', db.Integer, db.ForeignKey('posts.id'))
)

class User(db.Model):
__tablename__ = 'users'

id = db.Column(db.Integer, primary_key = True)
username = db.Column(db.String(20))

class Post(db.Model):
__tablename__ = 'posts'

id = db.Column(db.Integer, primary_key = True)
title = db.Column(db.String(255))

likes = db.relationship(
'User',
secondary = like,
backref = db.backref('likes', lazy = 'dynamic'),
lazy = 'dynamic'
)

我正在尝试根据 喜欢 的数量订购 Post

这是我基本上试图发出的查询:

SELECT p.*, COUNT(l.`pid`) as `likes`
FROM `posts` as p
LEFT JOIN `like` as l
ON p.`id` = l.`pid`
GROUP BY p.`id`
ORDER BY `likes` DESC

我只是无法在 SQLAlchemy 方面进行任何工作。

感谢任何人提供的任何帮助。

最佳答案

我没有太多使用 SQLAlchemy,所以我想我会试一试。我没有尝试使用你的模型,我只是写了一些新的(虽然足够相似):

likes = db.Table('likes',
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('post_id', db.Integer, db.ForeignKey('post.id'))
)

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20))

def __repr__(self):
return "<User('%s')>" % self.username

class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(255))

likes = db.relationship('User', secondary = likes,
backref = db.backref('posts', lazy='dynamic'))

def __repr__(self):
return "<Post('%s')>" % self.title

你想加入 likes 表,使用 func.count 来统计喜欢,group_by Post 和然后使用 order_by:

db.session.query(Post, func.count(likes.c.user_id).label('total'))\
.join(likes).group_by(Post).order_by('total DESC')

我找到了 ORM tutorial并且 SQLAlchemy 文档的其余部分非常有用。

关于python - SQLAlchemy按多对多关系排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5973553/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com