前置条件
  • Python 2.7.14
  • Python3 不支持 MySQLdb 模块,需要用 pymysql 替代,pymysql 兼容 2.7.14
    pip install pymysqlpip3 install pymysql
  • Python 仓库
modify_name.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
# @Time    : 2019/10/25 17:39
# @Author  : Eric.Mao
# @FileName: modify_name.py
# @Software: PyCharm
# @Blog    :http://www.dev-share.top/

import pymysql
import random
import sys

# 强制转码
defaultencoding = 'utf-8'
if sys.getdefaultencoding() != defaultencoding:
    reload(sys)
    sys.setdefaultencoding(defaultencoding)


class ModifyName(object):
    def __init__(self):
        # 缓存所有不重复的姓名
        self.result_names = set()
        # 连接到MySQL数据库
        self.db = pymysql.connect(
            host="172.160.180.53",
            port=3306,
            user="root",
            password="123456",
            database="sbtest",
            charset='utf8',
            conv={pymysql.FIELD_TYPE.STRING: str}, # 以字符串的方式返回查询结果
            cursorclass=pymysql.cursors.DictCursor # 以列表字典的格式返回查询结果
        )
        # 使用cursor()方法获取操作游标
        self.cursor = self.db.cursor()
        # 姓集合
        self.surnames = ['赵', '钱', '孙', '李', '西', '吴', '郑', '王', '冯', '陈', '楮', '卫', '蒋', '沈', '韩', '杨',
                         '朱', '秦', '尤', '许', '何', '吕', '施', '张', '孔', '曹', '严', '华', '金', '魏', '陶', '姜',
                         '戚', '谢', '邹', '喻', '柏', '水', '窦', '章', '云', '苏', '潘', '葛', '奚', '范', '彭', '郎',
                         '鲁', '韦', '昌', '马', '苗', '凤', '花', '方', '俞', '任', '袁', '柳', '酆', '鲍', '史', '唐',
                         '费', '廉', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常',
                         '乐', '于', '时', '傅', '皮', '卞', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄',
                         '和', '穆', '萧', '尹', '赖']
        # 名集合
        self.names = ['爱', '安', '百', '邦', '宝', '保', '抱', '贝', '倍', '蓓', '本',
                      '必', '碧', '璧', '斌', '冰', '兵', '炳', '步', '彩', '曹', '昌', '长', '常', '超',
                      '朝', '陈', '晨', '成', '呈', '承', '诚', '崇', '楚', '传', '春', '纯', '翠', '村',
                      '殿', '丁', '定', '东', '冬', '二', '凡', '方', '芳', '昉', '飞', '菲', '纷', '芬',
                      '奋', '风', '峰', '锋', '凤', '芙', '福', '付', '复', '富', '改', '刚', '高', '阁',
                      '铬', '根', '庚', '耕', '公', '功', '冠', '光', '广', '归', '桂', '国', '海', '寒',
                      '翰', '昊', '浩', '荷', '红', '宏', '洪', '鸿', '厚', '华', '存', '大', '丹', '道',
                      '德', '登', '砥', '典', '佃', '小', '狗', '亲']

    # 生成姓名
    def generate_name(self):
        # 姓
        sur = self.surnames[random.randint(0, len(self.surnames) - 1)]
        # 名
        name = self.names[random.randint(0, len(self.names) - 1)] + self.names[random.randint(0, len(self.names) - 1)]
        return sur + name

    # 生成去重后姓名
    def generate_name_list(self, count):
        while len(self.result_names) < count:
            name = self.generate_name()
            self.result_names.add(name)
        self.result_names = list(self.result_names)

    # 处理逻辑
    def processor(self, ids):

        num = len(ids)
        print('获得数据(%s)条' % len(ids))

        # 生成 num 个不重复的姓名
        self.generate_name_list(num)

        print('生成(%s)个不重复姓名' % len(self.result_names))

        # 将SQL语句批量加入到事务中
        for i in range(num):
            # 拼接 SQL 更新语句
            sql = "UPDATE table_1 SET username = '%s' WHERE id = '%s'" % (self.result_names[i], ids[i][0])
            # 将SQL语句加入到事务中
            self.cursor.execute(sql)

        try:
            # 提交一批SQL语句到数据库执行
            self.db.commit()
            print('执行成功!')
        except:
            print('执行失败!')
            # 发生错误时回滚
            self.db.rollback()

    # 初始化
    def init(self):
        sql = "SELECT id FROM table_1 LIMIT 5000"
        # 执行SQL语句
        self.cursor.execute(sql)
        # 获取所有记录列表
        ids = self.cursor.fetchall()
        # 处理逻辑
        self.processor(ids)


if __name__ == '__main__':
    __this = ModifyName()
    # 启动程序
    __this.init()
分类: Python

毛巳煜

高级软件开发全栈架构师

工信部备案号:辽ICP备17016257号-2