• mysql2csv 和 csv2mysql 工具


    mysql2csv 和 csv2mysql 工具

    在这里提供了两个使用 .csv 格式 的简单的 MySQL 数据库的导数据工具。csv 格式可以很容易地生成和解析,而且,也可以很容易地使用办公软件把 .csv 格式转换为 .xls/.xlsx 格式,或者把 .xls/.xlsx 格式转换为 .csv 格式的文件。

    • mysql2csv - 将 MySQL 的数据导出为 csv 格式的文件。
    • csv2mysql - 将 csv 格式的文件的数据导入到 MySQL 数据库。

    编译代码

    在编译代码之前,如果你用的是 yum,那么请先确定软件包 mysql-devel 已经安装在你的系统中,才能使用 mysql 的头文件 mysql/mysql.h ,以及和库文件 libmysqlclient.a 或者 libmysqlclient.so

    使用下面的两行命令一编译这两个工具:

    g++ mysql2csv.cpp -omysql2csv -g -L/usr/lib64/mysql/  -lmysqlclient
    g++ csv2mysql.cpp -ocsv2mysql -g -L/usr/lib64/mysql/  -lmysqlclient
    

    演示

    首先,创建一个测试用的数据库,建立初始的数据:

    [roxma@VM_6_207_centos mysql2csv]$ mysql -uroot --password="" --default-character-set=utf8
    ...
    
    mysql> create database csv_test default charset=utf8;
    Query OK, 1 row affected (0.02 sec)
    
    mysql> use csv_test;
    Database changed
    mysql> create table test(id int primary key, value1 varchar(1024))engine=innodb;
    Query OK, 0 rows affected (0.08 sec)
    
    mysql> show create table test G
    *************************** 1. row ***************************
           Table: test
    Create Table: CREATE TABLE `test` (
      `id` int(11) NOT NULL,
      `value1` varchar(1024) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    
    mysql> insert into test (id,value1) values(1,"hello"),(2, 'comma , double quotes " '),(3,NULL);
    Query OK, 3 rows affected (0.00 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    
    mysql> select * from test;
    +----+--------------------------+
    | id | value1                   |
    +----+--------------------------+
    |  1 | hello                    |
    |  2 | comma , double quotes "  |
    |  3 | NULL                     |
    +----+--------------------------+
    3 rows in set (0.00 sec)
    

    导出 MySQL 的数据到 .csv 文件:

    [roxma@VM_6_207_centos mysql2csv]$ ./mysql2csv host="127.0.0.1" port="3306"  db="csv_test" user="root" passwd="" charset="utf8" execute="select * from test" > data.csv
    host=127.0.0.1
    port=3306
    db=csv_test
    user=root
    passwd=
    charset=utf8
    execute=select * from test
    
    [roxma@VM_6_207_centos mysql2csv]$ cat data.csv
    id,value1
    1,hello
    2,"comma , double quotes "" "
    3,NULL
    

    导入 .csv 文件的数据到 MySQL:

    [roxma@VM_6_207_centos mysql2csv]$ ./csv2mysql host="127.0.0.1" port="3306" db="csv_test" user="root" passwd="" charset="utf8" execute="insert into test set id=?id+3, value1=?value1" input="data.csv"
    host=127.0.0.1
    port=3306
    db=csv_test
    user=root
    passwd=
    charset=utf8
    execute=insert into test set id=?id+3, value1=?value1
    input=data.csv
    3 rows executed.
    
    [roxma@VM_6_207_centos mysql2csv]$ mysql -uroot --password="" --default-character-set=utf8 --database="csv_test"  -e"select * from test"
    +----+--------------------------+
    | id | value1                   |
    +----+--------------------------+
    |  1 | hello                    |
    |  2 | comma , double quotes "  |
    |  3 | NULL                     |
    |  4 | hello                    |
    |  5 | comma , double quotes "  |
    |  6 | NULL                     |
    +----+--------------------------+
    

    支持的工具选项

    <thread>
        <tr>
            <th colspan="3">通用选项</th>
        </tr>
    </thread>
    
    <tbody>
        <tr>
            <td>host</td> <td>MySQL server 的机器名</td> <td>127.0.0.1</td>
        </tr>
        <tr>
            <td>port</td> <td>MySQL 连接的目标端口</td> <td>3306</td>
        </tr>
        <tr>
            <td>user</td> <td>MySQL 用户名</td> <td>root</td>
        </tr>
        <tr>
            <td>passwd</td> <td>MySQL 用户的密码</td> <td></td>
        </tr>
        <tr>
            <td>charset</td> <td>MySQL 连续使用的字符编码</td> <td>utf8</td>
        </tr>
        <tr>
            <td>db</td> <td>使用的 MySQL 数据库名。相当于 use db 命令。</td> <td></td>
        </tr>
    </tbody>
    
    <thread>
        <tr>
            <th colspan="3">mysql2csv 选项</th>
        </tr>
    </thread>
    <tbody>
        <tr>
            <td>execute</td> <td>需要执行的 MySQL 查询命令</td> <td></td>
        </tr>
        <tr>
            <td>null_cell_value</td> <td>当对应的值NULL时,使用这个字符串替换到表格中。</td> <td>NULL</td>
        </tr>
        <tr>
            <td>output</td> <td>生成的 csv 文件的文件名。如果这个选项为空,则文件 的内容会被输出到 stdout。</td> <td></td>
        </tr>
    </tbody>
    
    <thread>
        <tr>
            <th colspan="3">csv2mysql 选项</th>
        </tr>
    </thread>
    <tbody>
        <tr>
            <td>execute</td> <td>需要执行的 MySQL 指令</td> <td></td>
        </tr>
        <tr>
            <td>warning_as_error</td> <td>如果为个选项为1,那么在执行 MySQL 语句的过程中如果出现任何 warning,都会被视为错误,程序直接终止退出。</td> <td>1</td>
        </tr>
        <tr>
            <td>input</td> <td>输入的 csv 文件的文件名。如果这个选项为空,则程序从 stdin 中读取数据。</td> <td></td>
        </tr>
    </tbody>
    
    选项 描述 默认值

    代码下载

    https://github.com/roxma/cpp_learn/tree/master/tools/mysql2csv

  • 相关阅读:
    odoo11 外部数据导入方法2
    odoo 11 实现多个字段对应一个查询参数的查询
    ionic 访问odoo11之具体业务类api接口
    ionic访问odoo 11接口
    odoo 11导入外部数据过程记录
    程序发送邮件的思考
    Topshelf的Ioc实现
    查看MS Sqlserver文件大小语句
    TopShelf 自动配置Service测试
    odoo11 添加自定义模块报错问题
  • 原文地址:https://www.cnblogs.com/Pony279/p/3960539.html
Copyright © 2020-2023  润新知