洗牌SQLAlchemy结果?

mat*_*att 4 python database django sqlalchemy flask

有问题的代码:

 random_items = random.shuffle(Item.query.all())[20:30]
Run Code Online (Sandbox Code Playgroud)

它位于Flask/SQLAlchemy应用程序中.Item是模型.

这就是我现在正在做的事情并且它有效但我预见到当我开始使用真实数据集时会发生灾难.

我该怎么做呢?

小智 10

我不完全确定你的担忧.是否会返回大型数据集,因此大型列表将在内存中进行操作?

如果是这样,如果您不是过于担心可移植性,可以在SQL语句中执行此操作; 即,如果您使用MySQL,您可以:

Item.query.order_by(func.rand()).offset(20).limit(10).all()
Run Code Online (Sandbox Code Playgroud)

或者,在PostgreSQL中:

Item.query.order_by(func.random()).offset(20).limit(10).all()
Run Code Online (Sandbox Code Playgroud)

其他数据库具有类似的机制,因此调用的函数取决于您的目标.当然,如果您正在尝试编写可以在任何SQLAlchemy的后端上运行的通用应用程序,您可能需要坚持使用提供的示例.