如何使用flask/sqlalchemy按列的最大值排序表格?
我有一个自引用的表,里面有一个用户类:
class User(db.Model):
id = db.Column(db.Integer, primary_key = True)
username = db.Column(db.String(50), unique = True)
password = db.Column(db.String(50))
email = db.Column(db.String(100), index = True, unique =True)
age = db.Column(db.SmallInteger())
about_user = db.Column(db.String(500))
img_url = db.Column(db.String(120))
is_friend = db.relationship('User',
secondary = friends,
primaryjoin = (friends.c.user_id == id),
secondaryjoin = (friends.c.friend_id == id),
backref = db.backref('friends', lazy = 'dynamic'),
lazy = 'dynamic')
我想根据每个用户的好友数量来排序查询结果。这个查询应该像下面这样:
User.query.order_by(func.max(User.is_friend)).paginate(page, MONKEYS_PER_PAGE, False)
但是上面的查询不允许,它报错说AttributeError: 'Table' object has no attribute 'type'。那么,正确的方法是什么,才能根据用户的好友数量来排序这个表呢?
1 个回答
3
在编程中,有时候我们需要处理一些数据,而这些数据可能会以不同的格式出现。比如说,我们可能会遇到字符串、数字或者其他类型的数据。为了让程序能够正确理解和处理这些数据,我们需要将它们转换成合适的格式。
这个过程就叫做“数据类型转换”。简单来说,就是把一种类型的数据变成另一种类型。比如,把一个数字变成字符串,或者把一个字符串变成数字。
在不同的编程语言中,数据类型转换的方式可能会有所不同。有些语言会自动帮你转换,而有些则需要你手动进行转换。
理解数据类型转换非常重要,因为如果数据格式不对,程序可能会出错,或者得不到我们想要的结果。
# count the number of friends for each user
# friends are users as well, so need alias
# construct subquery for use in final query
friend = db.aliased(User)
sub = db.session.query(
User.id,
db.func.count(friend.id).label('fc')
).join(friend, User.friends
).group_by(User.id).subquery()
# query users, join on subquery to get friend count
# order by friend count, descending
users = db.session.query(User
).join(sub, sub.c.id == User.id
).order_by(sub.c.fc.desc()
).paginate(page, MONKEYS_PER_PAGE, False)