MySQL数据库删除重复数据只保留id最小值脚本


思路解读:
  1. 通过Navicatsql查询语句(以小说章节表为例)查询出出
    现重复小说章节的内容(以url的唯一性为例)
  2. 将数据导入Excel表格中
  3. 读取Excel,通过select查询url出现数据重复的id
  4. 将查询的id导入删除的sql语句中,删除成功

sql查询语句,查询chapter_url在表中出现的次数

SELECT chapter_url,count(chapter_url) as number from chapter GROUP BY chapter_url HAVING number >1 ORDER BY number desc; 
"""sql删除方法"""
DELETE 
from 
chapter 
where id in (
select 
id 
from 
(SELECT 
chapter_url,count(chapter_url) as number,id 
FROM `data_engine`
 GROUP BY chapter_url HAVING number >1 ORDER BY number desc) 
as t)
脚本方法
# -*- coding: utf-8 -*-
import pymysql
import xlrd

#打开excel
def open_excel(file):
    try:
        data = xlrd.open_workbook(file)
        return data
    except Exception as e:
        print(str(e))

#调用打开excel的方法
def excel_table_byindex():
    # 此处为Excel的路劲
    data = open_excel('F:\\workspace\\delete_sql.xls')
    table = data.sheet_by_name(u'Sheet1') #通过名称获取

    db = connectMysql()
    for i in range(415, 65536):
        url = table.cell(i, 0).value  #读取Excel的url
        number = table.cell(i, 1).value
        with db.cursor() as cursor:
            sql = "SELECT id FROM `chapter` where chapter_url='%s';" % (url)
            # yield sql
            print(sql)
            db.ping(reconnect=True)
            cursor.execute(sql)
            data = cursor.fetchall()
            db.commit()
            # return data
            db.close()
            get_id(data)



def get_id(ids):
    new_ids = list(ids)
    if len(new_ids)> 0:
        # 移除id的第0项
        new_ids.remove(new_ids[0])
        #  将id传进行循环删除
        for i in new_ids:
            db = connectMysql()
            with db.cursor() as cursor:
                sql = "DELETE FROM chapter WHERE id ='%s';" % (i[0])
                print(sql)
                db.ping(reconnect=True)
                cursor.execute(sql)
                db.commit()
                db.close()

# 此处填写你的mysql数据库账号及密码
def connectMysql():
    db = pymysql.connect(
        host='localhost',
        database='novellist',
        user='root',
        password='admin123',
        port=3306,
        charset='utf8'
    )
    return db

def main():  # 主方法调用
    con = excel_table_byindex()


if __name__=="__main__":
    table = main()


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,451评论 0 9
  • 林蕾 宜昌 焦点中级七期 坚持分享第143天 日子过得真快,咋眼间孩子已经上五年级了,个子也快赶上我,算算明年该上...
    壹凡心理阅读 287评论 0 0
  • 最近被杨丽萍刷了屏。她来广州表演《孔雀之冬》,很多朋友都去看了。我的朋友圈有两天都是她的现场照片,简直美得震撼。 ...
    夏天要过了阅读 395评论 0 0
  • 以下来自我和一个少年在朋友圈的对话: 小k: 有时候就很难融入集体。 我:说明你特别,是好事儿。 小k:啥意思, ...
    慕艺阅读 274评论 0 1
  • 大家好,我是IT修真院深圳分院第01期学员,一枚正直纯洁善良的web程序员。 今天给大家分享一下,修真院官网JS(...
    老菜菜阅读 401评论 0 2