洗牌SQLAlchemy结果?

时间:2012-06-12 21:49:40

标签: python database django sqlalchemy flask

有问题的代码:

 random_items = random.shuffle(Item.query.all())[20:30]

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

这就是我现在正在做的事情,但是当我开始使用真实的数据集时,我预见到了灾难。

我该如何正确地做到这一点?

1 个答案:

答案 0 :(得分:10)

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

如果是这样,如果你不是过分担心可移植性,你可以在SQL语句中做到这一点;即,如果你使用的是MySQL,你可以这样做:

Item.query.order_by(func.rand()).offset(20).limit(10).all()

或者,在PostgreSQL中:

Item.query.order_by(func.random()).offset(20).limit(10).all()

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