首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按活动对用户进行排序

按活动对用户进行排序
EN

Stack Overflow用户
提问于 2020-08-23 08:23:13
回答 1查看 59关注 0票数 0

我尝试按last_active列对用户进行排序,同时在列表顶部显示按ID排序的online users (last_active> = datetime.utcnow () - timedelta (minutes = 5))也很重要。

代码语言:javascript
运行
复制
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(16), index=True, nullable=False)
    last_active = db.Column(db.DateTime)


def get_result():
    online_time = datetime.utcnow() - timedelta(minutes=5)
    users= User.query.order_by(case(
            (User.last_active >= online_time, online_time),
            else_=User.last_active).desc())

    return users.limit(10).all()

我发现了以下错误:

代码语言:javascript
运行
复制
File "venv/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 2431, in __init__
    whenlist = [
  File "venv/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 2433, in <listcomp>
    for (c, r) in whens
  File "venv/lib/python3.8/site-packages/sqlalchemy/sql/operators.py", line 432, in __getitem__
    return self.operate(getitem, index)
  File "venv/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 759, in operate
    return op(self.comparator, *other, **kwargs)
  File "venv/lib/python3.8/site-packages/sqlalchemy/sql/operators.py", line 432, in __getitem__
    return self.operate(getitem, index)
  File "<string>", line 1, in <lambda>
    
  File "venv/lib/python3.8/site-packages/sqlalchemy/sql/type_api.py", line 67, in operate
    return o[0](self.expr, op, *(other + o[1:]), **kwargs)
  File "venv/lib/python3.8/site-packages/sqlalchemy/sql/default_comparator.py", line 237, in _getitem_impl
    _unsupported_impl(expr, op, other, **kw)
  File "venv/lib/python3.8/site-packages/sqlalchemy/sql/default_comparator.py", line 241, in _unsupported_impl
    raise NotImplementedError(
NotImplementedError: Operator 'getitem' is not supported on this expression

首先获取列表然后排序的选项并不是特别有趣。我正在尝试使用SQLAlchemy实现一个有效的查询。

EN

回答 1

Stack Overflow用户

发布于 2020-08-24 14:07:27

如何通过不同的排序让不同的用户在线和离线,并将结果相加:

代码语言:javascript
运行
复制
def get_result():
    online_time = datetime.utcnow() - timedelta(minutes=5)
    users_online = User.query.filter(User.last_active >= online_time) \
        .order_by(User.last_active.desc())
    users_offline = User.query.filter(User.last_active < online_time) \
        .order_by(User.id.asc())

    return users_online.limit(10).all() + users_offline.limit(10).all()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63542304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档