【发布时间】:2011-02-06 07:34:27
【问题描述】:
我想合并数据。以下是我的 MySQL 表。我想使用 Python 遍历两个列表的列表(一个带有 dupe = 'x' 和另一个带有 null dupes)。
这是示例数据。实际数据非常庞大。
例如:
a b c d e f key dupe
--------------------
1 d c f k l 1 x
2 g h j 1
3 i h u u 2
4 u r t 2 x
从上面的示例表中,所需的输出是:
a b c d e f key dupe
--------------------
2 g c h k j 1
3 i r h u u 2
到目前为止我所拥有的:
import string, os, sys
import MySQLdb
from EncryptedFile import EncryptedFile
enc = EncryptedFile( os.getenv("HOME") + '/.py-encrypted-file')
user = enc.getValue("user")
pw = enc.getValue("pw")
db = MySQLdb.connect(host="127.0.0.1", user=user, passwd=pw,db=user)
cursor = db.cursor()
cursor2 = db.cursor()
cursor.execute("select * from delThisTable where dupe is null")
cursor2.execute("select * from delThisTable where dupe is not null")
result = cursor.fetchall()
result2 = cursor2.fetchall()
for each record
for each field
perform the comparison and perform the necessary updates
### How do I compare the record with same key value and update the original row null field value with the non-null value from the duplicate? Please fill this void...
cursor.close()
cursor2.close()
db.close()
谢谢大家!
【问题讨论】:
-
无法找出问题所在。你想得到算法,还是在具体框架方面的实现?事实上,您只需要遍历光标和“合并”项目的字段。在这种情况下你能执行普通的 SQL 吗?因为如果可以,查询很简单。
-
这是简单的测试数据。实际上,有几千行和几百列,因此采用了这种方法。谢谢。
-
update delthistable t set ta = coalesce(dup.a, ta), tb = coalesce(dup.b, tb)... from (select * from delthistable where dupe = 'x') dup其中 t.dupe 'x' 和 t.key = dup.key --------------------------------- ----------------------------- 从 delthistable 中删除,其中 dupe 'x'
标签: python mysql merge duplicates duplicate-data