gpt4 book ai didi

python - 使用 Python 比较两个 sqlite 数据库

转载 作者:行者123 更新时间:2023-12-05 01:44:13 24 4
gpt4 key购买 nike

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

DB1 -

表 - fdetail

id    name    key
1 A k1
2 B K2
3 C K3

DB2 -

表 - fdetail

id    name    keyid
1 A k1
2 D K4
3 E K5
4 F K6

预期输出

id    name    keyid
1 B k2
2 C K3
3 D K4
4 E K5
5 F K6

我的代码是

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()

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

非常感谢任何帮助。

最佳答案

如果两个数据库都在同一个连接中打开(这需要 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()

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

关于python - 使用 Python 比较两个 sqlite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46867476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com