前几天去面试一份python工作,当时有道面试题需要将他那边给过来的数据用页面展示出来,这个展示数据页面就比较简单,我就是用django写了一个页面,将那些数据分页,导航到详细页而已,就是一开始对方给过来的数据就是一个excel表,里面大概有一万多条数据吧,所以我要先将数据弄进数据库,这样才方便操作。
这里用到的需要用到的库有xlrd
,pymysql
,没有的话需先自行pip安装。
先根据excel表的数据创建mysql表,
DROP TABLE IF EXISTS `app01_product`;
CREATE TABLE `app01_product` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`Asin` varchar(64) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
`Total_reviews` varchar(64) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
`Total_score` varchar(64) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6601 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
下面是源码:
# -*- coding: utf-8 -*-
# @Time : 2019/2/19 14:52
# @Author : Xin
# @File : db.py
# @Software: PyCharm
import xlrd
import pymysql
def leading_in_detail():
book = xlrd.open_workbook("1.xlsx")
sheet = book.sheet_by_name("front")
# 建立一个MySQL连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='test')
# 创建游标
cursor = conn.cursor()
# 创建插入SQL语句
sql ="""INSERT INTO app01_product(Asin, Total_reviews, Total_score) VALUES (%s,%s,%s)"""
# 创建一个for循环迭代读取xls文件每行数据的, 从第四行开始是要跳过标题和前面两空行
for r in range(3,sheet.nrows):
Asin=sheet.cell(r, 1).value
Total_reviews=sheet.cell(r, 2).value
Total_score = sheet.cell(r, 3).value
values = (Asin,Total_reviews,Total_score)
# 执行sql语句
cursor.execute(sql, values)
# 提交
conn.commit()
# 关闭游标
cursor.close()
# 关闭数据库连接
conn.close()
columns = str(sheet.ncols)
rows = str(sheet.nrows)
print("导入detail表成功")
print("我刚导入了 " + columns + " 列 and " + rows + " 行数据到MySQL!")
if __name__=="__main__":
leading_in_detail()
补充两点:
一、
当时将excel数据导入到mysql后发现一个问题,那就是那个日期变成了一串数据,网上搜索一下答案才知道,原来excel的日期是以序列数的形式存储的,即保存的日期实际是这个日期到1900-1-1相差的天数。因此导入数据之前应该先将日期数据格式化,直接右击“设置单元格格式”这种操作是无效的,下面再补充一下修改日期时间格式的步骤。

选择固定宽度,下一步

下一步

选择文本,点击完成

这时候再重新导入即可
二、
如果有安装Nivacat的话,其实还可以直接使用Nivacat工具来直接导入数据,下面简单说一下这种方法的步骤。
- 先自主创建表
CREATE TABLE `test_date` (
`id` int(30) NOT NULL AUTO_INCREMENT,
`date_time` varchar(50) DEFAULT NULL,
`money` varchar(50) DEFAULT NULL,
`username` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
按下图步骤操作,
image.png
-
根据你要导入的文件选择格式

选择你要导入的sheet

栏位名行:数据表字段所在的行位置;
● 第一个数据行:所导入源数据从第几行开始;
● 最后一个数据行:所导入源数据到第几行结束。
温馨提示:以上选项内容一定要填写正确,否则将不能完成正确的导入。


下拉选择excel列对应数据库表的字段

下面是主键设置,如果你的主键不是自增的,不要勾选


点击开始

看到这个就是支持成功了

数据库看到已经插入成功了

网友评论