IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 在数据库插入大量不同数据 -> 正文阅读

[大数据]在数据库插入大量不同数据

【举个例子】

需要在学生表里插入10w条不同的数据,包括学生的编号(唯一)、姓名、性别、年龄、入学时间、班级、邮箱、手机号。

目录

方法一(执行语句耗时13s):

1、通过python生成包含insert语句的txt文件

2、复制txt文件里的insert语句

3、在mysql执行该insert语句

方法二(执行语句耗时3s):

1、直接python连接mysql,执行生成的语句


方法一(执行语句耗时13s):

1、通过python生成包含insert语句的txt文件

可以先尝试生成10条(把里面的100000改成10即可),成功后再生成10w条。

import random
import string
import time

#生成name
def create_name():
    first_name = ["柳", "令狐", "慕容","文","西门","秦","向","迪丽","虞","白","诸葛","古","老","方","房","成"]
    dict = ["鹤", "冲", "棣","钱","纤","露","璐","热","森","子","汤","杏","魅","格","凉","凌","牧","暮","神","贤"]
    last_name = ''
    for i in range(random.randint(1,2)):
        last_name += random.choice(dict)
    return random.choice(first_name)+last_name

#生成date
def date():
    a1=(2013,1,1,0,0,0,0,0,0)         #设置开始日期时间元组(2013-01-01 00:00:00)
    a2=(2017,12,31,23,59,59,0,0,0)    #设置结束日期时间元组(2017-12-31 23:59:59)
    start=time.mktime(a1)    #生成开始时间戳
    end=time.mktime(a2)      #生成结束时间戳
    t = random.randint(start, end)    #在开始和结束时间戳中随机取出一个
    date_touple = time.localtime(t)   #将时间戳生成时间元组
    return time.strftime("%Y-%m-%d %H:%M:%S", date_touple)

#生成email
def create_email():
    # 首先生成用户名
    # 规定用户名由6~8位的随机大小写字母加数字组成
    chars = string.ascii_letters + string.digits
    n1 = random.choice((6,8))
    user_name = ''
    for i in range(n1):
        c = random.choice(chars)
        s = str(c)
        user_name += s
    # 再生成域名
    # 规定域名由3~5位的随机大小写字母加数字组成
    n2 = random.choice((3,5))
    domain_name = ''
    for i in range(n2):
        c = random.choice(chars)
        s = str(c)
        domain_name += s
    # 随机选取后缀名
    list2 = ['.com','.org','.net','.cn']
    last_name = random.choice(list2)
    return user_name+'@'+domain_name+last_name

insert_sql = "INSERT INTO `wyy_test`.`t_student`  VALUES "
with open("b.txt", "a") as fp:
        fp.write(insert_sql+"\n")

for id in range(100000):
    a = "('%s', '%s', '%s','%s','%s','%s班','%s','%s'),"%(str(id+1),create_name(),random.choice('男女'),random.randint(18,24),date(),random.randint(1,10),create_email(),str(id+18600000000))
    with open("b.txt", "a", encoding="utf-8") as fp:
        fp.write(a+"\n")

2、复制txt文件里的insert语句

注意将最后的“,”改成“;”

3、在mysql执行该insert语句

如果字符串超过限制,会抛出异常并提示执行语句的长度,将max_allowed_packet改成大于执行语句的长度,然后重新执行语句即可。

show global variables like 'max_allowed_packet';?——?查看最大允许包

set global max_allowed_packet=xxx; ——?设置最大允许包

方法二(执行语句耗时3s):

1、直接python连接mysql,执行生成的语句

import pymysql
import random
import string
import time

dbinfo = {
    "host": "xx.xx.xx.xxx",
    "user": "xxxx",
    "password": "xxxxxxxx",
    "port": xxxx}

class DbConnect():
    def __init__(self, db_cof, database=""):
        self.db_cof = db_cof
        self.db = pymysql.connect(database=database,
                                  cursorclass=pymysql.cursors.DictCursor,
                                  **db_cof)
        self.cursor = self.db.cursor()

    def execute(self, sql):
        try:
            self.cursor.execute(sql)
            self.db.commit()
        except:
            self.db.rollback()

    def close(self):
        self.db.close()

if __name__ == '__main__':
    #生成name
    def create_name():
        first_name = ["柳", "令狐", "慕容","文","西门","秦","向","迪丽","虞","白","诸葛","古","老","方","房","成"]
        dict = ["鹤", "冲", "棣","钱","纤","露","璐","热","森","子","汤","杏","魅","格","凉","凌","牧","暮","神","贤"]
        last_name = ''
        for i in range(random.randint(1,2)):
            last_name += random.choice(dict)
        return random.choice(first_name)+last_name

    #生成date
    def date():
        a1=(2013,1,1,0,0,0,0,0,0)         #设置开始日期时间元组(2013-01-01 00:00:00)
        a2=(2017,12,31,23,59,59,0,0,0)    #设置结束日期时间元组(2017-12-31 23:59:59)
        start=time.mktime(a1)    #生成开始时间戳
        end=time.mktime(a2)      #生成结束时间戳
        t = random.randint(start, end)    #在开始和结束时间戳中随机取出一个
        date_touple = time.localtime(t)   #将时间戳生成时间元组
        return time.strftime("%Y-%m-%d %H:%M:%S", date_touple)

    #生成email
    def create_email():
        # 首先生成用户名
        # 规定用户名由6~8位的随机大小写字母加数字组成
        chars = string.ascii_letters + string.digits
        n1 = random.choice((6,8))
        user_name = ''
        for i in range(n1):
            c = random.choice(chars)
            s = str(c)
            user_name += s
        # 再生成域名
        # 规定域名由3~5位的随机大小写字母加数字组成
        n2 = random.choice((3,5))
        domain_name = ''
        for i in range(n2):
            c = random.choice(chars)
            s = str(c)
            domain_name += s
        # 随机选取后缀名
        list2 = ['.com','.org','.net','.cn']
        last_name = random.choice(list2)
        return user_name+'@'+domain_name+last_name


    insert_sql = "INSERT INTO `wyy_test`.`t_student`  VALUES "
    insert_values = "".join(["('%s', '%s', '%s','%s','%s','%s班','%s','%s'),"
         %(str(id+1),create_name(),random.choice('男女'),random.randint(18,24),date(),random.randint(1,10),create_email(),str(id+18600000000))
         for id in range(100000)])
    sql = insert_sql + insert_values[:-1] + ";"
    time1 = time.time()
    db = DbConnect(dbinfo, database="wyy_test")
    db.execute(sql)
    db.close()
    time2 = time.time()
    print("总过耗时:%s秒" % (time2 - time1))

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-10-22 21:22:23  更:2022-10-22 21:25:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 -2025/4/22 17:59:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码