在db中,我有一個名爲register的表,它具有mail-id作爲主鍵。我曾經使用session.add_all()
批量提交。但有時候有些記錄已經存在;在這種情況下,我想分開已有的記錄和不存在的記錄。如何檢查一個查詢中的主鍵列表是否已經存在於數據庫中?
回答
用戶SQL ALchemys檢查此:
inspector = inspect(engine)
inspector.get_primary_keys(table, schema)
督察「反映」所有的主鍵,你可以檢查安劍錚,卓傑返回列表。
我認爲他們之後是一種批量插入的形式,可以跳過現有的鍵而不是失敗。他們似乎知道主鍵由哪些列組成(「mail-id」)。 –
http://docs.sqlalchemy.org/en/latest/orm/session_api.html#sqlalchemy.orm.session.Session.merge
如果你要添加到數據庫中的對象是完整的(如新對象至少包含了所有在數據庫中的記錄中存在的信息),可以使用Session.merge()
。有效地,merge()
將創建或更新現有行(通過查找主鍵(如果它存在於會話/數據庫中並從對象中複製對象的狀態)。需要注意的關鍵是傳遞給合併的對象的屬性值將覆蓋數據庫中已存在的屬性值。
我認爲這在性能方面並不是很好,所以如果這很重要,SQLAlchemy會有一些批量操作。您需要檢查將要添加/更新的主鍵集的存在性,併爲不存在的對象執行一個批量插入操作,併爲所做的操作執行一次批量更新。如果文檔需要成爲高性能的方法,那麼這些文檔會提供關於批量操作的一些信息。
http://docs.sqlalchemy.org/en/latest/orm/persistence_techniques.html#bulk-operations
嗨Rach,合併將爲我工作的方式,但我也想獲得哪些主鍵已經存在的優化方式。 – katrik
- 1. 檢查SQLite數據庫中是否已經存在一個值
- 2. CodeIgniter - 檢查數據庫中是否已經存在一個值
- 3. 如何檢查一個MySQL數據庫是否已經存在於PHP中?
- 4. 如何檢查文件是否已經存在於列表中?
- 5. 如何檢查一個整數是否已經在列表中
- 6. 檢查記錄是否已經存在於數據庫中
- 7. 如何檢查Android中的數據庫中是否已經存在一個值
- 8. 如何檢查PHP數據庫中是否已經存在url?
- 9. 我如何檢查一個項目是否已經存在於列表中?
- 10. 如何檢查數據在數據庫中是否已經存在保存
- 11. 如何檢查模型的實例是否已經存在於數據庫中
- 12. 檢查一個數字是否已經存在於python列表中
- 13. 檢查數據是否已經存在
- 14. 檢查記錄是否已經存在於MySQL數據庫
- 15. 如何檢查用戶是否已經存在於SQL數據庫中?
- 16. 如何檢查INSERT INTO ID是否已經存在於數據庫(PHP)中
- 17. 如何檢查用戶是否已經存在於數據庫中
- 18. 如何檢查表上的數據是否已經存在?
- 19. 如何檢查表中的列數據是否存在於同一個表中?
- 20. 如何檢查一個集合是否已經存在於ArangoDB
- 21. 檢查數據是否已經存在於chrome.storage.sync中
- 22. 如何使用MySQL檢查數據庫中是否已經存在表?
- 23. 檢查一個項目是否已經存在於JComboBox中?
- 24. 檢查一個項目是否已經存在於listbox1中
- 25. 如何從數據庫中檢查列是否存在表中?
- 26. 如何檢查一個IP是否已經存儲在mysql中?
- 27. 如何檢查我的主鍵是否已經在coredata中存在NSManagedObject?
- 28. 檢查數據庫表中是否存在已有的數字?
- 29. 如何檢查用戶是否存在於數據庫表中?
- 30. 如何檢查數據庫表是否存在於PDO中?
您使用了哪些數據庫? –
我正在使用Postgres – katrik
您可以利用新的[INSERT ... ON CONFLICT DO NOTHING](http://docs.sqlalchemy.org/en/latest/dialects/postgresql.html#insert-on-conflict-upsert )至少在那裏獲取數據。如果你使用的是足夠近的Postgres,那就是。 –