从查询对象中删除行

时间:2012-12-20 23:23:59

标签: sqlalchemy

我想知道在进行批量更新之前是否可以从查询对象中删除一些随机行。

示例:

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

有一种简单的方法吗?

1 个答案:

答案 0 :(得分: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')

...