python数据库两个库对比数据_python sqlite3:两个数据库中的表的差异

我有两个数据库具有相同的模式,我想有效地做一个表上的差异。即只返回唯一记录,折扣主键。python sqlite3:两个数据库中的表的差异

columns = zip(*db1.execute("PRAGMA table_info(foo)").fetchall())[1]

db1.execute("ATTACH DATABASE '/path/to/db1.db' AS db1")

db1.execute("ATTACH DATABASE '/path/to/db2.db' AS db2")

db2.execute("ATTACH DATABASE '/path/to/db1.db' AS db1")

db2.execute("ATTACH DATABASE '/path/to/db2.db' AS db2")

data = db2.execute("""

SELECT

one.*

FROM

db1.foo AS one

JOIN db2.foo

AS two

WHERE {}

""".format(' AND '.join(['one.{0}!=two.{0}'.format(c) for c in columns[1:]]))

).fetchall()

也就是说,忽略了主键(在这种情况下meow),不回,在这两个数据库中存在相同的记录。

表foo在db1样子:

meow mix please deliver

1 123 abc

2 234 bcd two

3 345 cde

而且表foo在db2样子:

meow mix please deliver

1 345 cde

2 123 abc one

3 234 bcd two

4 456 def four

所以从db2独特的条目是:

[(2, 123, 'abc', 'one'), (4, 456, 'def', 'four')]

我i我得到了什么。如果我有两列以上,这很好用。但是,如果只有两个,即一个主键和一个值,如查找表:

bar baz bar baz

1 123 1 234

2 234 2 345

3 345 3 123

4 456

我得到重复所有非唯一值N-1次和重复的唯一值N次,其中N是记录数在db1。我明白为什么会发生这种情况,但我不知道如何解决。

[(1, '234'),

(1, '234'),

(2, '345'),

(2, '345'),

(3, '123'),

(3, '123'),

(4, '456'),

(4, '456'),

(4, '456')]

我有一个想法是只取模拉所有重复的结果后:

N = db1.execute("SELECT Count(*) FROM foo").fetchone()[0]

data = [

list(data)

for data,n in itertools.groupby(sorted(data))

if np.mod(len(list(n)),N)==0

]

做哪些工作:

[[4, '456']]

但这似乎乱,我想喜欢在可能的情况下在第一个SQL查询中完成所有操作。

此外,在大型表(我真正的分贝有〜10K记录)这需要很长时间。任何方式来优化这个?谢谢!

2014-02-21

Joe Flip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值