2017-02-14 104 views
0

現在的問題是有點棘手....我有兩個表,我想比較他們的內容。表格有相同的號碼。的列和相同的列名以及相同的列順序(如果有的話)。使用python比較兩個sqlite3表格

現在我想比較他們的內容,但訣竅是他們的行的排序可以是不同的,即行號。表1中的1可以存在於第n行中。 1000在表2中。我想比較它們的內容,以便行的順序無關緊要。還要記住,他們不是主鍵。

現在我可以使用和設計數據結構,或者我可以使用現有的庫來完成這項工作。我想使用一些現有的API(如果有的話)。那麼任何一個人都可以指出我的方向?

+0

聽起來很瑣碎 - 兩個for循環會做的伎倆。 – postoronnim

+0

如果沒有主鍵並且順序不相同,如何確定兩個表之間的匹配行?似乎你有一個方法,但沒有說明。 –

回答

0

您需要更準確地瞭解您打算如何比較表格的內容以及預期結果。 Sqlite3本身是一個比較好的工具,你可以很容易地查詢你想得到的比較結果。

如果這些表位於不同的數據庫中,則可以使用python的sqlite3內置模塊將它們轉儲到臨時數據庫中。

您也可以將查詢結果轉儲到數據集合(如列表)中,然後執行比較,但如果我們不知道預期結果,則再次無法爲您提供幫助。

0

你說「沒有主鍵」。這是否意味着確實無法確定每行代表的項目的身份?如果這是真的,你的問題是不可能的,因爲你永遠無法確定一個表中的哪一行與另一個表中的每一行進行比較。

如果有建立身份的一組列,那麼您將讀取表1中的每一行,從表2中讀取具有相同身份的行,並比較非身份列。如果您發現表2中的所有表1行,並且非標識列是相同的,那麼您將完成對具有不在表1中的標識的表2行的檢查。

如果存在否身份如果你不關心身份,但只是兩個表出現是否相同,那麼你會從每個表中讀取記錄按照某種特定順序排序。比較第1行到第1行,第2行到第2行等。當你點擊不同的行時,你知道表格是不一樣的。

作爲一種快捷方式,您可以使用SQLite將數據轉儲到兩個文本文件中(對於兩個表再次以相同方式排序)並比較文件內容。

如果沒有保證唯一排序順序的列的子集,則可能需要在ORDER BY子句中包含全部列。 (如果這樣的列的子集,那麼這些列將構成行的身份,並且您將使用上述算法)。

2

製作兩個文本文件。對它們排序。將它們與diff比較。

或者,將它們導入到SQLite表中。 然後你就可以使用查詢類似如下:

SELECT * FROM a INTERSECT SELECT * FROM b; 
SELECT * FROM a EXCEPT SELECT * FROM b; 

獲得存在兩個表中,或僅在一個表中的行。