使用 Python 比较两个 sqlite 数据库

Pri*_*tra 3 python sqlite

我是Python新手。我正在尝试比较两个具有相同架构的 SQLite 数据库。两个数据库中的表结构也相同,但数据不同。我想从两个数据库的两个表中提取行,这些行不存在于db1.fdetaildb2.fdetail

DB1 -

Table - fdetail

id    name    key
1     A       k1
2     B       K2
3     C       K3
Run Code Online (Sandbox Code Playgroud)

DB2 -

Table - fdetail

id    name    keyid
1     A       k1
2     D       K4
3     E       K5
4     F       K6
Run Code Online (Sandbox Code Playgroud)

预期输出

id    name    keyid
1     B       k2
2     C       K3
3     D       K4
4     E       K5
5     F       K6
Run Code Online (Sandbox Code Playgroud)

我的代码是

import sqlite3

db1 = r"C:\Users\X\Documents\sqlitedb\db1.db"
db2 = r"C:\Users\X\Documents\sqlitedb\db2.db"

tblCmp = "SELECT * FROM fdetail order by id"

conn1 = sqlite3.connect(db1)
conn2 = sqlite3.connect(db2)

cursor1 = conn1.cursor()
result1 = cursor1.execute(tblCmp)
res1 = result1.fetchall()

cursor2 = conn2.cursor()
result2 = cursor2.execute(tblCmp)
res2 = result2.fetchall()
Run Code Online (Sandbox Code Playgroud)

所以我有两个列表res1res2。如何根据列比较列表Keyid

非常感谢任何帮助。

CL.*_*CL. 5

如果两个数据库在同一个连接中打开(需要ATTACH),您可以在 SQL 中进行比较:

import sqlite3

db1 = r"C:\Users\X\Documents\sqlitedb\db1.db"
db2 = r"C:\Users\X\Documents\sqlitedb\db2.db"

conn = sqlite3.connect(db1)
conn.execute("ATTACH ? AS db2", [db2])

res1 = conn.execute("""SELECT * FROM main.fdetail
                       WHERE keyid NOT IN
                         (SELECT keyid FROM db2.fdetail)
                    """).fetchall()
res2 = conn.execute("""SELECT * FROM db2.fdetail
                       WHERE keyid NOT IN
                         (SELECT keyid FROM main.fdetail)
                    """).fetchall()
Run Code Online (Sandbox Code Playgroud)

您还可以通过将查询与UNION ALL组合来获得单个结果。