我有一个应用程序,可以跟踪物品并使用SQLObject
python ORM
。在某个时间点,应用会检查表格是否不太大,如果表格中的项目超过10000个,则会删除第一个N
项目,因此表格中的项目为10000个。通过SQLObject
写下这种优雅而有效的方法是什么?所有的解决方案我来了之后是缓慢和笨拙:(。SQLObject:如何从表中删除前N个对象?
2
A
回答
1
我个人没有使用SQLOBJECT
。因此,这是一个基于ordering records by inserted date
一个简单的删除语句,历史最悠久的N
记录将被删除,它在MYSQL
,无法设置limit
clause using a variable due to this bug ,所以我用最直接的方法。
对于这个sampel我使用的阈值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
上。所以最好写一个storedprocedure ...因为这全是一个akward一堆陈述...
1
我知道这个线程是旧的,但我想过发布一个条目,以防有人遇到它通过Google搜索,就像我一样。
我有一个类似的问题,我需要自定义删除调用。 SQLObject的给你两个选择创建具有where子句的自定义一个DELETE语句:
- 使用SQLBuilder类内置(见http://sqlobject.org/SQLBuilder.html#delete)
- 调用SQL语句直接
我与去第二个选项,因为它是更加灵活,简化的:
dsqlMetricseries._connection.query("DELETE FROM dsql_metricseries WHERE metric_id = %s"%metric_id)
- dsqlMetricserie S:SQLObject的子类,代表一个数据库表
- _connection模型类:处理对SQLObject的内部数据库连接
- 查询:SQLObject的方法用于执行如上任何SQL语句
0
,我意识到这是旧的文章但其他观众可能会觉得这很有用。 我不知道这将切分选择(假设记录ID是随着您添加记录升序)。
myselect = tableobject.select(orderBy=tableobject.q.id)
if myselect.count() > 10000:
tableobject.deleteMany(tableobject.q.id<myselect[10001].id)
未经测试,但我经常使用deleteMany()。
相关问题
- 1. 从excel表中删除前n行
- 2. 如何从列表中删除对象
- 3. 从对象列表中删除对象
- 4. 从Prolog中的列表中删除前N个元素
- 5. 如何从mongodb数组中删除前n个元素?
- 6. 如何从二进制文件中删除前n个字符
- 7. 删除N个随机对象Django orm
- 8. ios CoreData删除第n个对象
- 9. 如何从java中的链表中删除一个对象?
- 10. 删除字节对象的前n个元素而不复制
- 11. 在Python中,如何从列表(列删除)删除第N个列表项?
- 12. 删除对象从列表
- 13. 如何从表格中正确删除一个对象?
- 14. Java。如何从两个列表中删除重复的对象
- 15. Python。如何从列表中删除一个对象
- 16. 删除前n项
- 17. 无法从另一个对象的列表中删除对象
- 18. 如何从NSCache中删除对象?
- 19. 如何从Amazon S3中删除对象?
- 20. 如何从NSMutableArray中删除ID对象?
- 21. 如何从NSManagedObjectContext中删除新对象
- 22. 如何从对象中删除$$ hashKey?
- 23. 如何从Parse中删除对象?
- 24. 如何从NSArrrayController中删除对象
- 25. 如何从对象中删除元素?
- 26. 如何从ArrayList中删除对象?
- 27. 如何从json中删除null对象
- 28. 如何从NSMutableArray中删除NSDate对象
- 29. 如何从文件中删除对象?
- 30. 如何从NSMutableArray中删除对象?
不知道这是否是正确的方向......也许你可以编写一个触发器来检查插入前的表行数,然后插入删除旧记录,其中计数将等于您计划的新记录数插入.. – bonCodigo
@bonCodigo SQLObject是否支持触发器?可能吗?它可以连接没有任何触发器的数据库,例如'SQLite'O_O。 – grigoryvp
它在这篇文章(http://sourceforge.net/projects/sqlobject/)中说它可以支持任何主要的RDBMS ...... [SQLite可以创建触发器](http://www.sqlite.org /lang_createtrigger.html)。但为什么不是一个简单的'删除'表达适合你?对不起,你真的需要专家的建议,我:Ancora Imparo ...并仍在探索:D – bonCodigo