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

Python 如何从表中选择两个不同的随机行?,python,sql,sqlite,sqlalchemy,pyramid,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

现在我有

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)

检查以下链接以供参考


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


你说限制2时有错误吗?嗯,我不确定。我具体在哪里定义限制2。我想我是通过我的视图代码来完成的,在查询的末尾有一个限制(2)。检查我发布的解决方案。那么你是说.limit(2)部分不起作用,这就是为什么它会两次拾取同一个条目?但是即使限制不起作用,它也会返回整个表。为什么会有重复的条目?为什么不在ROWNUMI找不到关于ROWNUM的很多信息的地方使用random()函数呢。似乎是oracle数据库特定的?@SOaddict ROWNUM在sqlite中不存在。你必须使用极限。如果不使用random(),输出很可能非常稳定。。。
SELECT items.id AS items_id, items.name AS items_name, items.data AS items_data
FROM items
ORDER BY random()
LIMIT 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()