Sqlalchemy 从查询对象中删除行

Sqlalchemy 从查询对象中删除行,sqlalchemy,Sqlalchemy,我想知道在进行批量更新之前是否可以从查询对象中删除一些随机行 示例: writerRes = self.session.query(table) writerRes = writerRes.filter(table.userID==3) -> Delete some of the rows randomly writerRes.update({"userID": 4}) 有没有一种简单的方法可以做到这一点?取决于数据库。基于这个答案 Postgresql和Sqlite3: number_

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

示例:

writerRes = self.session.query(table)
writerRes = writerRes.filter(table.userID==3)
-> Delete some of the rows randomly
writerRes.update({"userID": 4})
有没有一种简单的方法可以做到这一点?

取决于数据库。基于这个答案

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')

…我犯了一个错误。。。代码看起来很棒,但对我来说不起作用。我得到这个错误
OperationalError:(OperationalError)对于表达式的一部分,SELECT只允许一个结果。你知道吗?你在使用什么数据库和运行什么代码?我只在SQLite和Postgres上测试了它。我使用的是SQLite数据库,运行的是您发布的代码,只是在运行代码之前过滤了行:writerRes=writerRes.filter(table.userID==4)