我有一个表格,我想在最近的100个(order by timestamp desc limit 100
)之外选择行并删除它们。当然,我首选的是直接查询它们,但我认为不可能。
我找到了一个黑客,我可以将子查询包装在" select * from(...)foo" (并且它有效),但我不知道如何在SQLalchemy中对其进行建模。
我尝试递归内连接同一个表的两个实例,其中一个实例引用别名,但根据我看到的SQLalchemy示例,我不知道如何将限制应用于别名。
这是我尝试使用方法#1的尝试:
注意:query1从100个最新行中选择id; query3选择从query1中排除的id以从query2中删除。
`
def rs_tagged_repos():
return main.session.query(main.TaggedRepos)
...
query1 = rs_tagged_repos()\
.with_entities(main.TaggedRepos.id)\
.filter(main.and_
(
main.TaggedRepos.status == 'True'
, main.TaggedRepos.repoID == _repo['repo_id']
, main.TaggedRepos.scID == _repo['sc_id']
, main.TaggedRepos.category == _this_tag['category']
)
)\
.order_by(main.TaggedRepos.timestamp.desc())\
.limit(100)
query2 = rs_tagged_repos() \
.filter(main.and_
(
main.TaggedRepos.status == 'True'
, main.TaggedRepos.repoID == _repo['repo_id']
, main.TaggedRepos.scID == _repo['sc_id']
, main.TaggedRepos.category == _this_tag['category']
)
)
query3 = rs_tagged_repos()\
.filter(
~main.TaggedRepos.id.in_(select0)
)\
.delete()
`
就像我说的那样,我很想知道直接做到这一点的方法,但此时我只需要一些有用的东西。感谢任何可行的帮助。
答案 0 :(得分:0)
原来我可以使用.slice(x, y)
直接查询我的设置。我只需要确保我的限制(y)是一个任意大的数字。
它的行为就像你使用"限制y偏移x"。
http://docs.sqlalchemy.org/en/latest/orm/query.html#sqlalchemy.orm.query.Query.slice