如何在python中的sqlalchemy.sql.expression.func.random()中设置随机种子?

lea*_*lea 5 python random sqlalchemy

我想在使用 order_by 混洗 sqlalchmy 查询结果时设置随机种子,以始终获得相同的查询结果:

my_query.order_by(func.random())
Run Code Online (Sandbox Code Playgroud)

我在文档中找不到如何执行此操作。我尝试过

my_query.order_by(func.random(random_seed=1))
my_query.order_by(func.random(random_state=1))
Run Code Online (Sandbox Code Playgroud)

但两者都不起作用。预先感谢您的任何想法/提示!

一切顺利,莉亚

Raz*_*erM 2

SQLAlchemyfunc对象仅呈现 SQL 中的函数。

>>> from sqlalchemy import func
>>> print(func.random())
random()
Run Code Online (Sandbox Code Playgroud)

在某些情况下(包括这种情况),它会在不同的数据库后端(例如 MySQL)上呈现不同的底层函数:

>>> from sqlalchemy.dialects import mysql
>>> print(func.random().compile(dialect=mysql.dialect()))
rand()
Run Code Online (Sandbox Code Playgroud)

这意味着您使用的数据库会生成随机数,因此您必须调用特定于数据库的函数来设置种子,例如在您使用的 PostgreSQL 上setseed,其调用方式与其他 SQL 函数相同:

>>> func.setseed(0.123...)
Run Code Online (Sandbox Code Playgroud)