2017-02-14 205 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; 

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