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~

  • 相关阅读:
    mac 10.15.7 修改PATH
    oc 属性类型一般用法
    ubuntu解压zip文件名乱码
    telnet 退出
    docker 根据容器创建镜像
    mac android adb device 没有显示设备
    Yii2 查看所有的别名 alias
    Yii2 App Advanced 添加 .gitignore
    ubuntu 18.04 搜狗突然就提示乱码
    An error occured while deploying the file. This probably means that the app contains ARM native code and your Genymotion device cannot run ARM instructions. You should either build your native code to
  • 原文地址:https://www.cnblogs.com/luruiyuan/p/5713273.html
Copyright © 2011-2022 走看看