【问题标题】:How to set random seed in sqlalchemy.sql.expression.func.random() in python?如何在 python 的 sqlalchemy.sql.expression.func.random() 中设置随机种子?
【发布时间】:2016-11-12 17:29:19
【问题描述】:

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

my_query.order_by(func.random())

我在文档中找不到如何操作。我试过了

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

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

一切顺利, 莉亚

【问题讨论】:

    标签: python random sqlalchemy


    【解决方案1】:

    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 函数相同:

    >>> func.setseed(0.123...)
    

    【讨论】:

    • 我正在使用一个简单的 sqllite 数据库。我尝试使用 setseed 命令,但它不起作用。知道如何在 sqllite 中做到这一点吗?文档似乎没有解决这个问题。
    • 您问题的 SQLAlchemy 部分已得到解答,但实际上您是在问数据库问题。这在 SQLite 上是不可能的 stackoverflow.com/questions/24256258/…
    猜你喜欢
    • 1970-01-01
    • 2020-03-18
    • 2020-12-04
    • 2020-02-21
    • 2012-07-16
    • 2014-11-21
    • 2014-09-20
    • 2011-06-14
    • 1970-01-01
    相关资源
    最近更新 更多