使用python生成数据导入linux中的mysql

用mysql创建一个数据库,模拟一张商品销量表,表字段和内容需求(需求不一定很明确,逻辑严谨是重点,mysql安装在自己电脑的vmware虚拟机中,虚拟机系统建议ubuntu):
商品ID(模拟1000个商品)、商品卖出时间(建议2014-01-01 00:00:00:00到2015-03-01 00:00:00:00,间隔random(0,10)秒递增)、卖出价格(建议random(20-30)次变一下,成交记录价格,价格变动可以随机在random(100-150))
用python模拟生成数据,数据总量要求达到百万级
注意点:1.生成数据时,主要是先生成卖出时间的数据,因为pandas表格生成每一行都要有数据。时间数据随机变动为不确定数据量。
2.存入mysql时,如果直接存入数据,因为数据量大导致速度较慢。可以先生成txt文件,使用navicat手动导入mysql,再导出.sql文件,以提升速度

1.代码

import pandas as pd
import numpy as np
import random
import datetime 
import pymysql

class Shop(object):
    def __init__(self):
        self.ID, self.sellTime, self.sellPrice, self.dealPrice = self.csv()
        self.mysql(self.ID, self.sellTime, self.sellPrice, self.dealPrice)
        
    def csv(self):
        '''生成csv表
        returns:
            表的字段:id号, 卖出时间, 卖出价格, 成交价格
        '''
        table = pd.DataFrame(columns = ['id', 'sellTime', 'sellPrice', 'dealPrice'])
        #生成卖出时间
        start = '2014-01-01 00:00:00'
        end = '2014-01-30 00:00:00'
        #设置时间戳
        datestart = datetime.datetime.strptime(start, '%Y-%m-%d %H:%M:%S')
        dateend = datetime.datetime.strptime(end, '%Y-%m-%d %H:%M:%S')
        sellTime = []
        while datestart < dateend:
            datestart += datetime.timedelta(seconds = random.randint(0, 10))  #秒数0-10随机增加
            sellTime.append(datestart.strftime('%Y-%m-%d %H:%M:%S'))
        #添加时间数据
        table['sellTime'] = sellTime
        #id字段
        ID = np.arange(0, len(sellTime))
        table['id'] = ID
        #添加卖出价格数据
        sellPrice = []
        for i in range(0, len(sellTime)):
            sellPrice.append(random.randint(20, 30))
        table['sellPrice'] = sellPrice
        #添加成交价格数据
        dealPrice = []
        for i in range(0, len(sellTime)):
            dealPrice.append(random.randint(100, 150))
        table['dealPrice'] = dealPrice
        return table['id'], table['sellTime'], table['sellPrice'], table['dealPrice']
        
    def mysql(self, ID, sellTime, sellPrice, dealPrice):
        '''数据存入mysql数据
        args:
            ID
            sellTime:卖出时间
            sellPrice:卖出价格
            dealPrice:成交价格
        '''
        host = 'localhost'  #连接名
        port = 3306    #端口号
        user = 'root'  #用户名
        passwd = 'a'   #用户密码
        db = 'shop'    #数据库名
        conn = pymysql.connect(host=host, port=port, user=user, passwd=passwd, db=db, charset='utf8')
        cur = conn.cursor()
        #循环每一行数据,循环一条存入一条数据
        for i in range(0, len(self.ID)):
            sId = self.ID[i]
            sSelltime = self.sellTime[i]
            sSellprice = self.sellPrice[i]
            sDealprice = self.dealPrice[i]
            try:
                insertSql = "insert into sell1(id,selltime,sellprice,dealprice) values(%s,%s,%s,%s)"
                #转换数据类型
                sellSql=(str(sId), str(sSelltime), str(sSellprice), str(sDealprice))
                cur.execute(insertSql, sellSql)
                conn.commit()
            except Exception as e:
                print(e)
                conn.rollback()
        cur.close()
        conn.close()
        print('mysql写入完成')
    '''
    #数据导出csv文件再转为txt文件
    table.to_csv('table.csv',index=False)
    #转为txt格式
    data = pd.read_csv('table.csv')
    with open('table.txt','a+') as f:
        for line in data.values:
            f.write((str(line[0])+'\t'+str(line[1])+'\t'+
                     str(line[2])+'\t'+str(line[3])+'\t'+'\n'))
    '''
if __name__=='__main__':
    Shop()

2.直接把数据存入windows下的mysql中
2.1.把txt文件数据导入navicat对应的数据表中,再导出sql文件数据
3.在linux的mysql中创建对应表(使用相同的数据库名和表名表结构)
mysql -u 用户名 -p 数据库名 < 数据库名.sql
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值