首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过SQLAlchemy获取随机行

通过SQLAlchemy获取随机行
EN

Stack Overflow用户
提问于 2008-09-13 19:58:03
回答 8查看 41.1K关注 0票数 92

如何使用SQLAlchemy从表中选择一个或多个随机行?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-09-13 20:09:29

这在很大程度上是数据库特有的问题。

我知道PostgreSQL、SQLite、MySQL和Oracle能够按随机函数排序,因此您可以在SQLAlchemy中使用以下命令:

代码语言:javascript
复制
from  sqlalchemy.sql.expression import func, select

select.order_by(func.random()) # for PostgreSQL, SQLite

select.order_by(func.rand()) # for MySQL

select.order_by('dbms_random.value') # For Oracle

接下来,您需要根据需要的记录数量限制查询(例如,使用.limit())。

请记住,至少在PostgreSQL中,选择随机记录有严重的性能问题;here就是一篇很好的文章。

票数 138
EN

Stack Overflow用户

发布于 2008-12-24 03:22:31

如果您正在使用orm,并且表并不大(或者您缓存了它的行数),并且您希望它独立于数据库,那么真正简单的方法是。

代码语言:javascript
复制
import random
rand = random.randrange(0, session.query(Table).count()) 
row = session.query(Table)[rand]

这是稍微作弊,但这就是你使用orm的原因。

票数 26
EN

Stack Overflow用户

发布于 2013-02-16 10:19:56

有一种简单的方法可以拉取一个与数据库无关的随机行。只要使用.offset()即可。不需要拉取所有行:

代码语言:javascript
复制
import random
query = DBSession.query(Table)
rowCount = int(query.count())
randomRow = query.offset(int(rowCount*random.random())).first()

其中Table是您的表(或者您可以在其中放置任何查询)。如果您想要几行,那么您可以多次运行此命令,并确保每一行都不同于前一行。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60805

复制
相关文章

相似问题

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