我有一個應用程序,可以跟蹤物品並使用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