如何从表中选择2个不同的随机行?

时间:2013-10-22 01:18:25

标签: python sql sqlite sqlalchemy pyramid

现在我有

row=session.query(Item).order_by(func.random()).limit(2)
name1=row[0].name
name2=row[1].name

这给了我每个条目的第一列(名称)。问题是,我得到倍数(它会选择相同的随机行两次。我希望它总是不同。有没有办法在没有if,then语句的情况下做到这一点?

如果它有用,当我打印行时,它给我这样的东西:

SELECT items.id AS items_id, items.name AS items_name, items.data AS items_data FROM items ORDER BY random() LIMIT ? OFFSET ?

为什么会说限制?我已经加入限制(2)

2 个答案:

答案 0 :(得分:2)

似乎在func.random()中使用order_by在SQL中是个坏主意(http://www.webtrenches.com/post.cfm/avoid-rand-in-mysql)。相反,我计算了表的长度,找到了这个长度的2个随机数,然后查询表以找到与这些随机数相关联的行。显然这更快。至少它没有任何重复:)

number=session.query(func.count(Item.id)).scalar()
randoms=random.sample(range(number),2)
item1=session.query(Item).filter_by(id=randoms[0]+1).one()
item2=session.query(Item).filter_by(id=randoms[1]+1).one()

答案 1 :(得分:1)

SELECT items.id AS items_id, items.name AS items_name, items.data AS items_data
FROM items
ORDER BY random()
LIMIT 2;

请查看以下链接以供参考。

http://www.tutorialspoint.com/sqlite/sqlite_limit_clause.htm