21
这是我目前的模型的一个简单的例子(我使用的是Flask SQLAlchemy extension):SQLAlchemy的顺序通过在许多计数一对多的关系
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的一侧工作。
感谢任何人可以提供的帮助。
嘿,谢谢你的回答。几件事情要注意。查询结尾处有一个额外的括号。 MySQL不喜欢''-total''(尽管总DESC'工作正常)_。另外,我认为将id设置为'.group_by(Post.id)'可能会更好。最后我遇到了'func.count(likes)'的问题。它正在翻译成一个空数_('COUNT()')_。提供一个列,通过'func.count(likes.c.did)'固定它。再次感谢。 – anomareh 2011-05-12 09:06:04
@anomareh太棒了,很高兴它有帮助。我会更新我的答案,所以它(希望)更通用。我想知道这里有不同的SQLAlchemy版本吗?我正在使用0.7b4。 – zeekay 2011-05-12 09:18:41
可能,我正在使用0.6.7。 – anomareh 2011-05-12 09:39:01