我是Python新手。我试图比较具有相同模式的两个sqlite数据库。两个数据库中的表结构也相同,但数据不同。我想从两个数据库中获取两个表中的行,db2.fdetail
或DB1 -
Table - fdetail
id name key
1 A k1
2 B K2
3 C K3
DB2 -
Table - 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()
我的代码是
res1
所以我有两个列表res2
和Keyid
。如何根据列module.exports = {
view: function(vnode){
// form built here
}
}
比较列表。
非常感谢任何帮助。
答案 0 :(得分:2)
如果两个数据库都在同一个连接中打开(需要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相结合来获得单个结果。
答案 1 :(得分:1)
你可以使用python'set':
res1 = set(res1)
res2 = set(res2)
result = res1.symmetric_difference(res2)
两组的对称差异是一组元素,它们在任一组中,但不在两者中。
或者您可以分别遍历两个列表,检查是否存在。
答案 2 :(得分:0)
您可以将列表转换为集合,并将可用的集合操作用于您的意图。