zoukankan      html  css  js  c++  java
  • 将csv格式的数据文件导入/导出数据库+添加新的字段

    最近一直忙于实验室的事情,没有好好更新博客,在抓包的过程中,遇到了很多问题。

    因为我常用Wireshark将抓包信息导出为csv文件,这里简单mark一下将csv文件导入/导出到数据库的2种方法:

    一.简单,但是稍慢的方法,使用Navicat for MySQL,傻瓜式导入数据库:

    流程如下:

    安装完成并配置好连接后界面如下:

    新建数据库

    进入导入向导

    选择导入类型:

    然后选择文件作为数据源,这里是我之前抓好的包,300w+条抓包记录

    这里直接采取默认设置

    同样默认

    自己设置了下表明,新建了表

    这里是程序根据文件内容进行的猜测,注意要修改下数据类型,并根据需要做相应调整,这里有点不太好,目前只找到了通过方向键“下”来添加,没有其他操作,如果增加的数据记录没有填写,则自动删除。

    我将包的信息缩减到只用我需要的,这样抓取的信息就从1G锐减到200+M

     半小时,300w+个记录

    这慢的,谁用谁知道~~~~

    二.使用SQL语句导入csv为表,速度快!

    使用SQL语句可以快速实现大量数据导入数据库的效果。示例如下:

    # Windows 中
    load data infile '..\uploads\test.csv'
    into table sampleTableName
    fields terminated by ','  optionally enclosed by '"' escaped by ','   
    lines terminated by '
    ' ignore 1 lines;
    
    # Linux 中
    load data infile '..\uploads\test.csv'
    into table sampleTableName
    fields terminated by ','  optionally enclosed by '"' escaped by ','   
    lines terminated by '
    ' ignore 1 lines;

      

    解释:

    1. load data infile + 文件路径:这里使用了相对路径,我的机子上安装的MySQL在'C:ProgramDataMySQLMySQL Server 5.7'中,一般情况下,csv文件中第一行一般是每列属性的名称,因此在导入数据库时应省略第一行
    2. 句子中sampleTableName应替换为对应的表的名称
    3. csv文件中,域一般用逗号分隔,域的字段值一般用一对双引号包裹,换行一般用‘ ’(windows下),因此我发现一般escaped by+逗号与lines terminated by+' '有对应关系,如果用escaped by """,即引号分隔,则只有将lines terminated by改成' '才能导入,并且此时不能ignore 1 lines;

    常见错误:

    Error Code 1290:

    我机子上安装的是MySQL5.7,

    MySQL5.7默认运行的状态是:

    Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

     这是因为需要导入的文件不再MySQL认为的安全文件夹内,因此MySQL拒绝了导入操作。

    使用如下语句可看到MySQL当前认为的安全文件夹,将文件放入文件夹内即可

    SHOW VARIABLES LIKE 'secure_file_priv';
    

      

    三、使用SQL语句将数据库表导出为csv文件

     鉴于Navicat比较容易上手,所以这里只介绍一下如何用SQL语句将数据库表导出为csv文件:

    用select语句选择需要导出的字段、表,说明其他附加条件(例如用where子句,还可以进行排序),然后说明导出文件的路径和文件名,注意,如果是MySQL是在 secure-file-priv 选项下运行,则必须将路径调整为上文说过的

    secure-file-priv路径,如果不知道,就用show variables like查看,否则报错Error 1209

    当然,这样导出要求导出的文件不存在,否则报错 Error 1086

    示例如下:

    select * from newdb2.dataset where vendor = 'xiaomi' order by time 
    into outfile 'C:\ProgramData\MySQL\MySQL Server 5.7\Uploads\test.csv'
    fields terminated by ','
    optionally enclosed by '"'
    lines terminated by '
    ';
    

     此示例用到了where 子句和order by 排序,应该够用了

    那就这样~see you~

  • 相关阅读:
    Mybatis resultMap和resultType的区别
    根据xml文件生成javaBean
    WebService如何封装XML请求 以及解析接口返回的XML
    Java SE练习
    Maven手动将jar导入本地仓库
    【公告】【公告】【公告】【公告】
    【题解】SDOI2010地精部落
    【题解】CF559C C. Gerald and Giant Chess(容斥+格路问题)
    【题解】任务安排(斜率优化)
    【题解】Cats Transport (斜率优化+单调队列)
  • 原文地址:https://www.cnblogs.com/luruiyuan/p/5713273.html
Copyright © 2011-2022 走看看