2012-12-20 67 views
0

我想知道在進行批量更新之前是否可以從查詢對象中刪除一些隨機行。從查詢對象中刪除行

例子:

writerRes = self.session.query(table) 
writerRes = writerRes.filter(table.userID==3) 
-> Delete some of the rows randomly 
writerRes.update({"userID": 4}) 

是否有一個簡單的方法來做到這一點?

回答

1

Selecting random row with SA取決於數據庫。根據這個答案。

PostgreSQL和SQLITE3:

number_of_random_rows = 3 
rand_rows = session.query(table.userid).order_by(func.random()).limit(number_of_random_rows).subquery() 
session.query(table).filter(table.userid.in_(rand_rows)).delete(synchronize_session='fetch') 

的MySQL:

number_of_random_rows = 3 
rand_rows = session.query(table.userid).order_by(func.rand()).limit(number_of_random_rows).subquery() 
session.query(table).filter(table.userid.in_(rand_rows)).delete(synchronize_session='fetch') 

...

+0

我犯了一個錯誤...代碼看起來很大,但它並沒有爲我工作。我得到這個錯誤OperationalError:(OperationalError)只有一個結果允許一個表達式的一部分的SELECT。任何想法? – joko1206100

+0

你正在使用什麼數據庫以及你在運行什麼代碼?我只在SQLite&Postgres上測試過它。 –

+0

我正在使用SQLite數據庫,並且正在運行您發佈的代碼,除了在運行代碼之前過濾行之外:writerRes = writerRes.filter(table.userID == 4) – joko1206100