如何使用外部 csv 更新数据库表
如何使用外部 csv 更新数据库表
现有数据库的销售表(sales)数据如下,ORDERID是主键:
ORDERID |
CLIENT |
SELLERID |
AMOUNT |
ORDERDATE |
1 |
LIHD |
11 |
9893 |
2020/12/7 |
2 |
NYSD |
1 |
8332 |
2020/12/7 |
3 |
RSDRG |
10 |
4614 |
2020/12/7 |
4 |
LDCH |
18 |
8807 |
2020/12/7 |
5 |
JXJDI |
19 |
743 |
2020/12/7 |
另有销售数据文件(sales.csv)数据如下:
ORDERID |
CLIENT |
SELLERID |
AMOUNT |
ORDERDATE |
3 |
RSDRG |
10 |
9999 |
2020/12/7 |
6 |
NYSD |
1 |
8332 |
2020/12/7 |
7 |
RSDRG |
10 |
4614 |
2020/12/7 |
8 |
LDCH |
18 |
8807 |
2020/12/7 |
9 |
JXJDI |
19 |
743 |
2020/12/7 |
现需要使用sales.csv的数据更新数据库中sales表的数据,更新后数据库中sales表的数据如下:
ORDERID |
CLIENT |
SELLERID |
AMOUNT |
ORDERDATE |
1 |
LIHD |
11 |
9893 |
2020/12/7 |
2 |
NYSD |
1 |
8332 |
2020/12/7 |
3 |
RSDRG |
10 |
9999 |
2020/12/7 |
4 |
LDCH |
18 |
8807 |
2020/12/7 |
5 |
JXJDI |
19 |
743 |
2020/12/7 |
6 |
NYSD |
1 |
8332 |
2020/12/7 |
7 |
RSDRG |
10 |
4614 |
2020/12/7 |
8 |
LDCH |
18 |
8807 |
2020/12/7 |
9 |
JXJDI |
19 |
743 |
2020/12/7 |
借助集算器可以很方便地完成这件事。
集算器安装包可去润乾网站下载,运行时需要一个授权,免费版本就够用。
1. 运行集算器,配置数据库连接并命名,填写的参数和 JDBC 连接时一样。
操作菜单:Tool->Datasource Connection->Datasouce 设置如下:
2. 在集算器中编写脚本csv2db.dfx:
小数据时(csv中的数据量较少,在运行环境中,适合直接加载至内存 ):
A |
B |
|
1 |
=file("sales.csv").import@ct() |
/读取csv文件内容 |
2 |
=connect("mysql") |
/连接数据库 |
3 |
>A2.update(A1,sales,ORDERID,CLIENT,SELLERID,AMOUNT,ORDERDATE) |
/使用db.update函数将 csv数据更新至数据库的sales表 |
4 |
>A2.close() |
/关闭数据库连接 |
因为sales表中数据需要更新,所以直接使用update函数,如果知道csv中数据都是新的,那么可以使用了update@i函数,将只生成INSERT语句,这样速度会快很多,因为不需要判断是否生成UPDATE语句。update函数的详细用法见:db.update()。
3. 执行脚本后,再观察数据库中sales表,可见数据已更新:
当csv中的数据量较多,在运行环境中,不适合或者无法直接加载至内存时。只需要将A1格中的import改为cursor,就可以完成大数据情况下的csv更新数据表的工作。
英文版