我尝试按last_active列对用户进行排序,同时在列表顶部显示按ID排序的online users (last_active> = datetime.utcnow () - timedelta (minutes = 5)
)也很重要。
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()
我发现了以下错误:
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实现一个有效的查询。
发布于 2020-08-24 14:07:27
如何通过不同的排序让不同的用户在线和离线,并将结果相加:
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()
https://stackoverflow.com/questions/63542304
复制相似问题