mysql 导入大批量excel数据

excel转换为csv格式

通过excel保存的时候选择为csv格式即可

创建数据库以及表格

CREATE DATABASE 数据库名;

/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`myemployees` /*!40100 DEFAULT CHARACTER SET gb2312 */;

USE `item`;

/*Table structure for table `departments` */

DROP TABLE IF EXISTS `stock_rate`;


CREATE TABLE `stock_rate` (
  `名称` varchar(20) ,
  `类型` varchar(20) ,
  `终端售价价格带` varchar(200),
  `SP码`varchar(200) ,
  PRIMARY KEY (`SP码`) 
#其实不用SP码作为主键
) ENGINE=InnoDB AUTO_INCREMENT=271 DEFAULT CHARSET=gb2312;


/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

load local 数据涉及到的问题

在开始执行之前一定要先去看一下在dos中是否可以执行mysql -u root -p命令,确认无误以后以下代码在终端完成执行
接着执行
mysql -u root --local-infile=1 -p

use item;
load data local infile 'D:422stock_rate.csv' into table stock_rate
CHARACTER SET utf8 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '
'
IGNORE 1 LINES
(名称, 类型, 终端售价价格带, SP码);

https://www.zhihu.com/question/426972214

导入数据

use item;
load data infile 'C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\stock_source.csv' into table stock_source
CHARACTER SET utf8 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '
'
IGNORE 1 LINES
(sp码,spname, 仓库, 城市, 方舱出库量,方舱入库数据详情,方舱库存量,wms出库总数量,wms入库数据详情,wms库存量,wms库存成本,方舱在途数量,wms在途数量);

创建表格

uSE `item`;

/*Table structure for table `departments` */

DROP TABLE IF EXISTS `stock_source`;


CREATE TABLE `stock_source` (
  `sp码` varchar(200),
  `spname` varchar(200),
  `仓库` varchar(20),
  `城市` varchar(20),
  `方舱出库量` int default 0,
  `方舱入库数据详情` varchar(20),
  `方舱库存量` int,
  `wms出库总数量` int default 0,
  `wms入库数据详情` varchar(200),
  `wms库存量` int default 0,
  `wms库存成本` float default 0,
  `方舱在途数量` int default 0,
  `wms在途数量` int default 0
) ENGINE=InnoDB AUTO_INCREMENT=271 DEFAULT CHARSET=gb2312;


/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

数据源:

CREATE TABLE `249_price` (
  `名称` varchar(200) ,
  `类型` varchar(200) ,
  `标品库名称` varchar(200),
  `SP码` varchar(200) ,
  `成本` float default 0 not null
--   PRIMARY KEY (`SP码`) 
) ENGINE=InnoDB AUTO_INCREMENT=271 DEFAULT CHARSET=gb2312;

load data infile 'C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\stock_new.csv' into table stock
CHARACTER SET utf8 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '
'
IGNORE 1 LINES
(sp码,spname,仓库,城市,方舱出库量,wms出库总数量,wms库存量,wms库存成本,wms在途数量);

CREATE TABLE `stock` (
  `sp码` varchar(200) ,
  `spname` varchar(200) ,
  `仓库` varchar(200),
  `城市` varchar(200) ,
  `方舱出库量` int default 0 not null,
  `wms出库总数量` int default 0 not null,
  `wms库存量` int default 0 not null,
  `wms库存成本` float default 0 not null,
  `wms在途数量` int default 0 not null
--   PRIMARY KEY (`SP码`) 
) ENGINE=InnoDB AUTO_INCREMENT=271 DEFAULT CHARSET=gb2312;


from openpyxl import load_workbook
wb = load_workbook("stock4.xlsx")
current_sheet = wb['各前置仓单品周转']
# 创建第一张表:各前置仓单品周转
# current_sheet['A1'] = 'sp码'
# current_sheet['B1'] = 'spname'
# current_sheet['C1'] = '仓库'
# current_sheet['D1'] = '城市'
# current_sheet['E1'] = '前30天销售'
# current_sheet['F1'] = '库存周转天数'
# current_sheet['G1'] = '分类'
# wb.save(filename="stock2.xlsx")
source_sheet = wb['库存']
for j in range(1, 5):
    for i in range(2, source_sheet.max_row+1):
        current_sheet.cell(row=i, column=j).value = source_sheet.cell(row=i, column=j).value
for i in range(2, current_sheet.max_row+1):
    current_sheet[f'E{i}'] = f'=sumifs("C:UsersxujinPycharmProjectspythonProject2[sales.xlsx]Sheet1!"$F:$F,"C:UsersxujinPycharmProjectspythonProject2[sales.xlsx]Sheet1!"$E:$E,A{i},"C:UsersxujinPycharmProjectspythonProject2[sales.xlsx]Sheet1!"$I:$I,C{i})'

    
wb.save(filename="stock6.xlsx")


from openpyxl import load_workbook
wb = load_workbook("stock.xlsx")
current_sheet = wb.create_sheet('各前置仓单品周转', 0)
current_sheet = wb['各前置仓单品周转']
# 创建第一张表:各前置仓单品周转
current_sheet['A1'] = 'sp码'
current_sheet['B1'] = 'spname'
current_sheet['C1'] = '仓库'
current_sheet['D1'] = '城市'
current_sheet['E1'] = '前置仓库存量'
current_sheet['F1'] = '前30天销售'
current_sheet['G1'] = '库存周转天数'
current_sheet['H1'] = '分类'
source_sheet = wb['库存']

list0 = [1, 2, 3, 4, 10]
for i in range(2, source_sheet.max_row+1):
    for k, j in enumerate(list0):
        current_sheet.cell(row=i, column=k+1).value = source_sheet.cell(row=i, column=j).value
for i in range(2, current_sheet.max_row+1):
    current_sheet[f'F{i}'] = f"=SUMIFS('C:\Users\xujin\PycharmProjects\pythonProject2\[sales.xlsx]Sheet1'!$G:$G,'C:\Users\xujin\PycharmProjects\pythonProject2\[sales.xlsx]Sheet1'!$F:$F,A{i},'C:\Users\xujinPycharmProjects\pythonProject2\[sales.xlsx]Sheet1'!$L:$L,C{i})"
    current_sheet[f'G{i}'] = f'=IFERROR(IF(E{i}>0,E{i}/(0{i}/30),0),"有库存无销售")'
wb.save(filename="stock1.xlsx")

原文地址:https://www.cnblogs.com/ivan09/p/14698656.html