2016-07-10 89 views
0

我想洗牌使用ORDER_BY得到總是相同的查詢結果的sqlalchmy查詢結果時設置一個隨機種子:如何在python中設置sqlalchemy.sql.expression.func.random()中的隨機種子?

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

回答

0

的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...) 
+0

我正在使用一個簡單的sqllite數據庫。我試圖使用setseed命令,但它不起作用。任何想法如何在sqllite中做到這一點?這些文檔似乎沒有解決這個問題。 – lea

+0

您的問題的SQLAlchemy部分已被回答,但是您確實在問一個數據庫問題。這是不可能在SQLite http://stackoverflow.com/questions/24256258/order-by-random-with-seed-in-sqlite – RazerM