EXcel与MySQL之间的数据迁移

参考:

  • 将Excel表格或者CSV文件导入到Mysql中
  • 如何把使用Navicat把Excel表格中时间日期以dateTime格式导入MySQL数据库
  • 将EXCEL表格中的数据导入mysql数据库表中(两种方法)
  • Linux下MySQL导入文件出错ERROR 1290 (HY000)
  • 使用Python将Excel中的数据导入到MySQL

1. 将Excel中数据迁移到MySQL中

  1. 将Excel转化为CSV格式,记住保存的路径和文件名最好别出现中文,删除属性名,仅保留数据即可。之后用Sublime Text3打开,在file选项中有set file encoding to 选择UTF-8
  2. 更改Mysql编码
    我们要把utf8编码格式的文件导入到mysql中,因此需要设置mysql字符集为utf8.
    进入mysql,查看mysql当前字符集:
    show variables like 'char%';
    必须确保以下五项均为utf8.
    character_set_client
    character_set_connection
    character_set_database
    character_set_results
    character_set_server
    如果其中有一项不是,需要修改/etc/mysql/my.cnf文件。
    首先停止mysql,然后打开my.cnf文件。
    在[mysqld]标签下添加character_set_server=utf8和init_connect=’SET NAMES utf8′
    然后保存退出,重启mysql,如果没有变化可以重启机器。
    这一步骤,我的没有问题,没有修改,正确性待考证。
  3. 在MySQL创建表格,表格的属性与EXcel中保持一致。
create table consume(
    studentId char(10) not null,   #10为数字的号码串
    cardId   char(6),                    #6为数字的号码串
    address varchar(40),            #不定号码串,显示中文地址
    Jdatetime datetime,              # 显示日期和时间
    money  int                             #显示消费金额
    );
  1. 导入数据测试,将CSV中所有数据复制两条到新文件consume.CSV中,执行
    load data local infile 'E:\\Desktop\\paper\\consume.CSV' into table consume fields terminated by ',' lines terminated by '\n';
    显示其他结果均正常,只有时间显示格式为:0000-00-00 00:00:00
    时间导入失败
  2. 解决时间导入失败问题
    重新建立表格,设置时间格式为varchar(30),重新生成表格和导入数据,显示结果正确,接着将字符串格式转化为时间格式
    ALTER TABLE consume MODIFY COLUMN Jdatetime datetime;
    结果仍然错误。原因:给出的时间格式为:11/4/2014 13:39:00,SQL需要的时间格式为:2014-11-04 13:39:00
  3. 从Excel表格解决问题:分列
    将日期和时间分成两列,日期格式为M/D/Y,时间格式设为文本即可。
    这样分成两列,然后修改日期列的类型为自定义:yyyy-mm-dd,这就再转化为CSV即可,此时一行的数据形式如下:1111111111 ,159777,良乡第二食堂三层 ,2014-11-02,15:04:57,-1400
  4. 从重新建立表格,导入数据即可,没问题了。

2. 将数据从MySQL导出到Excel中

  1. 使用命令:select * into outfile "E:\\test.txt" from consume;
    显示错误:Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement 0.000 sec
  2. 解决办法:使用代码:show variables like '%secure%';
    找到secure_file_priv的值C:\ProgramData\MySQL\MySQL Server 5.7\Uploads\
    把这个路径作为保存路径:select * into outfile "C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads\\test.txt" from consume;这样就生成了txt文档
  3. 新建excel,选择数据来自于文本即可,设置一下,即可导入。

3. 使用Python将Excel中的数据导入到MySQL

使用pymysql和openpyxl两个库,具体代码如下:

import pymysql
from openpyxl import load_workbook

wb = load_workbook('E:\\Desktop\\paper\\data_deal\\2014-11-12.xlsx')
sheet = wb.active
conn = pymysql.connect(
  user="root",
  password="******",
  port=3306,
  host="127.0.0.1",   # 本地数据库  等同于localhost
  db="student",       # 数据库名
  charset="utf8"
)
cur = conn.cursor()      # 获取对应的操作游标
query = 'insert into consume (studentId, cardId, address, Jdate, Jtime, money) values (%s, %s, %s, %s, %s, %s)'
for i in range(1, sheet.max_row+1):
    studentId = (sheet.cell(row=i, column=1)).value
    cardId = (sheet.cell(row=i, column=2)).value
    address = (sheet.cell(row=i, column=3)).value
    Jdate = (sheet.cell(row=i, column=4)).value
    Jtime = (sheet.cell(row=i, column=5)).value
    money = (sheet.cell(row=i, column=6)).value
    values = (studentId, cardId, address, Jdate, Jtime, money)
    # 执行sql语句
    cur.execute(query, values)
cur.close()
conn.commit()
conn.close()
print(sheet.max_row, "行数据导入结束")

4. 将excel文件中的数据导入到mysql

原文

在你的表格中增加一列,利用excel的公式自动生成sql语句,具体方法如下:
1)增加一列(假设是D列)
2)在第一行的D列,就是D1中输入公式:
=CONCATENATE("insert into tablename (col1,col2,col3) values (",A1,",",B1,",",C1,");")
3)此时D1已经生成了如下的sql语句:
insert into table (col1,col2,col3) values ('a','11','33');
4)将D1的公式复制到所有行的D列(就是用鼠标点住D1单元格的右下角一直拖拽下去啦)
5)此时D列已经生成了所有的sql语句
6)把D列复制到一个纯文本文件中,假设为sql.txt
把sql.txt放到数据库中运行即可,你可以用命令行导入,也可以用phpadmin运行。

你可能感兴趣的:(EXcel与MySQL之间的数据迁移)