我是Python新手。我正在尝试比较两个具有相同架构的 SQLite 数据库。两个数据库中的表结构也相同,但数据不同。我想从两个数据库的两个表中提取行,这些行不存在于db1.fdetail或db2.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)
所以我有两个列表res1和res2。如何根据列比较列表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()
Run Code Online (Sandbox Code Playgroud)
您还可以通过将查询与UNION ALL组合来获得单个结果。
| 归档时间: |
|
| 查看次数: |
6181 次 |
| 最近记录: |