使用python比较两个sqlite3表

时间:2017-02-14 13:34:45

标签: python database sqlite

现在这个问题有点棘手....我有2个表,我想比较它们的内容。表格相同没有。列和相同的列名称以及列的相同排序(如果有这样的事情)。

现在我想比较它们的内容,但诀窍是它们的行的顺序可以不同,即行号。表1中的1可以存在于行号中。表2中的1000.我想比较它们的内容,使得行的顺序无关紧要。而且还要记住,他们不是主键。

现在我可以使用和设计数据结构,或者我可以使用现有的库来完成这项工作。我想使用一些现有的API(如果有的话)。那么任何人都能指出正确的方向吗?

3 个答案:

答案 0 :(得分:2)

制作两个文本文件。排序他们。将它们与diff进行比较。

或者,将它们导入SQLite表。 然后您可以使用以下查询:

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

获取两个表中存在的行,或仅存在于一个表中。

答案 1 :(得分:0)

您需要更准确地了解如何比较表格的内容以及预期结果。 Sqlite3本身是一个很好的比较工具,您可以轻松查询您希望得到的比较结果。

如果这些表位于不同的数据库中,您可以使用python的sqlite3 bulit-in模块将它们转储到临时数据库中。

您也可以将查询结果转储到数据集合(例如列表)中,然后执行比较,但如果我们不知道预期的结果,我们就无法帮助您。

答案 2 :(得分:0)

你说“没有PRIMARY KEY”。这是否意味着确实无法确定每行所代表的项目的标识?如果这是真的,那么你的问题是不可解决的,因为你永远无法确定一个表中的哪一行与另一个表中的每一行进行比较。

如果一组建立标识的列,那么您将从表1中读取每一行,从表2中读取具有相同标识的行,并比较非标识列。如果您发现表2中的所有表1行,并且非标识列相同,那么您最后检查表2中具有不在表1中的标识的行。

如果没有身份并且您不关心身份,但只是两个表是否相同,那么您将从每个表中读取记录表以某种特定顺序排序。比较第1行到第1行,第2行到第2行等。当你遇到不同的行时,你知道这些表是不一样的。

作为一种快捷方式,您可以使用SQLite将数据转储到两个文本文件中(同样,对两个表的排序方式相同)并比较文件内容。

如果没有保证唯一排序顺序的列子集,您可能需要在ORDER BY子句中包含所有列。 (如果这样的列子集,那么这些列将构成行的标识,您将使用上述算法。)

相关问题