我有一个跟踪项目并使用SQLObject
python ORM
的应用程序。在某个时间点,应用程序会检查表是否太大,如果表中的项目超过 10000 个,则会删除前 N 个项目,以便表中的项目达到 10000 个。通过SQLObject
记录下来的优雅而有效的方法是什么?我所追求的所有解决方案都是缓慢且尴尬的:(。
最佳答案
我个人没有使用过SQLOBJECT
。因此,这是一个基于按插入日期排序记录
的简单删除语句,最旧的N
记录将被删除,并且位于MYSQL
中。无法设置limit
clause using a variable due to this bug ,所以我用了最直接的方法。
对于这个示例,我将阈值设置为 6
,因为很难达到 10000
...
示例表:
COL1 COL2
1 112
2 0
3 20
4 10
5 100
6 30
7 200
8 108
set @table_count:=0;
set @excess_count:=0;
select count(*) into @table_count
from tablex;
select (case when @table_count > 6
then (@table_count -6)
else 0 end) into @excess_count
;
select *
from tablex
where col1 between 1 and @excess_count
order by col1 asc
;
选择的记录:
COL1 COL2
1 112
2 0
以上查询按col1
对记录进行排序,您可以根据您的情况进行更改。因此,删除查询可以基于最后一个 select
构建。因此最好编写一个存储过程...因为这都是一堆笨拙语句...
关于python - SQLObject:如何从表中删除前N个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14158465/