删除sqlite中的重复行?

2024-05-15 00:20:59 发布

您现在位置:Python中文网/ 问答频道 /正文

如何输入相同的条目? 我的桌面播放器有两个重复的方面(名称,wowp_id)。如何合并它们?

我一直在寻找相关的问题。下面的代码基于我找到的答案。进程运行良好,但仍有重复项。我希望没有重复的名字。如果多个名称的wowp_id不同,我希望删除wowp_id并只保留名称的一个条目。

def sql_removeduplicates():
    con = sqlite3.connect('WOWT.sql')
    with con:    
        cur = con.cursor()    
        cur.execute("SELECT name, COUNT(*) FROM players GROUP BY name, team, wowp_id HAVING COUNT(*) > 1")
        rows = cur.fetchall()
        con.commit()
        for row in rows:
            print row

我的球员阵容:

  (id, wowp_id, name, team)
(108, 501078041, u'prazluges', None)
(109, 507894244, u'Aidis', None)
(110, 500742127, u'Aidis', None)
(111, u'Aidis', u'Aidis', None)
(112, u'Aidis', u'Aidis', None)
(113, 500864543, u'prazluges', None)
(114, u'Aidis', u'Aidis', None)
(115, u'Aidis', u'Aidis', None)
(116, u'Aidis', u'Aidis', None)
(117, 501078041, u'satih', None)
(118, u'Aidis', u'Aidis', None)

Tags: name名称noneidsqlcount条目con
3条回答

你可以的

DELETE FROM players
 WHERE id NOT IN
(
  SELECT MIN(id) id
    FROM players
   GROUP BY wowp_id, name
);

注意:在继续进行DELETE之前,请确保您的数据有可靠的备份。

从表中删除重复项后,请确保创建UNIQUE约束

CREATE UNIQUE INDEX idx_wowp_id_name ON players(wowp_id, name);

重复数据消除后的结果:

|  id |   wowp_id |      name | team |
|-----|-----------|-----------|------|
| 108 | 501078041 | prazluges | None |
| 109 | 507894244 |     Aidis | None |
| 110 | 500742127 |     Aidis | None |
| 111 |     Aidis |     Aidis | None |
| 113 | 500864543 | prazluges | None |
| 117 | 501078041 |     satih | None |

这里是演示

将结果导入到自定义类的set中,并定义contains方法以保留所需内容。示例如下:

class players:
   def __contains__(self, item):
        return self.playersObj.name != item.name
   # Your other methods go here

然后将您的行导入一个players实例并将其写回。

可以在列上定义唯一索引,也可以使用索引列在表上定义唯一约束。

^{}

^{}

这些有助于防止重复发生。链接指向SQLite文档。

相关问题 更多 >

    热门问题