如何在Python中使用sqlalchemy.sql.expression.func.random()函数设置随机种子?

5

我想在使用order_by随机重排sqlalchemy查询结果时设置一个随机种子,以便始终获得相同的查询结果:

my_query.order_by(func.random())

我在文档中找不到如何操作。我尝试使用

my_query.order_by(func.random(random_seed=1))
my_query.order_by(func.random(random_state=1))

但两者都没有起作用。 非常感谢您提供的任何想法/提示! 最好的祝愿, Lea
1个回答

2
SQLAlchemy的func对象只是将函数渲染为SQL。
>>> from sqlalchemy import func
>>> print(func.random())
random()

在某些情况下(包括此例),它将在不同的数据库后端上呈现不同的基础功能,例如在MySQL上:

>>> from sqlalchemy.dialects import mysql
>>> print(func.random().compile(dialect=mysql.dialect()))
rand()

这意味着您使用的数据库会生成随机数,因此您必须调用特定于数据库的函数来设置种子。例如,在PostgreSQL中,您可以使用setseed,该函数与其他SQL函数的调用方式相同。请注意保留HTML标签。
>>> func.setseed(0.123...)

我正在使用一个简单的sqllite数据库。我尝试使用 "setseed" 命令,但它不起作用。有什么办法可以在sqllite中实现它吗?文档似乎没有解决这个问题。 - lea
SQLAlchemy的部分已经得到了回答,但实际上你正在问一个关于数据库的问题。在SQLite上是不可能的。https://dev59.com/DWAf5IYBdhLWcg3w0VUf - RazerM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接