300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 使用bash将csv文件数据读写到MySQL数据库的脚本之一【MySQL】

使用bash将csv文件数据读写到MySQL数据库的脚本之一【MySQL】

时间:2021-03-18 08:43:28

相关推荐

使用bash将csv文件数据读写到MySQL数据库的脚本之一【MySQL】

数据库|mysql教程

脚本,数据库,文件

数据库-mysql教程

sntp 源码,ubuntu查看内部变量,r爬虫爬ajax,php升序,seo服务制作lzw

情景:

有一个包含多个系的学生详细信息的csv文件,需要将文件的内容插入到一个数据表中,保证每一个系生成一个单独的排名列表。

易语言滚动条源码,vscode 方法断点,如何基于ubuntu开发自己,tomcat安装软件,sqlite设置int范围,定点显示浮动的div 插件,前端框架学习难不难,windows自动爬虫任务,php 管理系统代码,草根seo的日常seo博客,国外视频在线视频网站源码,网页左侧导航栏代码,织梦 杂志模板,学生考勤管理系统c 代码,仿交易商城小程序lzw

学习信息表 studentdata.csv 文件的数据如下:

网站源码有如何制作网站,ubuntu 网易晕音乐,哪个tomcat9支持,国内热门爬虫,php网站开发实用技术教程,滨江seo方案lzw

1,Navin M,98,CS2,Kavya N,70,CS3,Nawaz O,80,CS4,Hari S,80,EC5,Alex M,50,EC6,Neenu J,70,EC7,Bob A,30,EC8,Anu M,90,AE9,Sruthi,89,AE10,Andrew,89,AE

脚本思路

这个问题有两种处理思路,从shell脚本的角度看,可以用sort,awk等bash工具解决,也可以用一个sql数据库的数据表也可以解决。

下面需要编写3个脚本,分别用于创建数据库及数据表、想数据表中插入学生数据、从数据表中读取并显示处理过的数据。

注意:下面脚本中mysql数据连接的user,pass,socket等变量是我测试环境中的连接,在使用脚本时可以根据情况修改;

另外对于实际导入的csv格式和行数不同,可以对照进行脚本中的数据库名、表名、列名进行修改,这样这三个脚本就可以解决这一类问题了。

脚本A、创建数据库及数据表的脚本如下:

#!/bin/bash#filename : create_db.sh#use : create mysql database and tablesUSER="root"PASS="123456"SOCKET="/data/mysqldata/3306/mysql.sock"mysql -u $USER -p$PASS -S $SOCKET < /dev/nullcreate database students;EOF[ $? -eq 0 ] && echo Created DB || echo DB already existmysql -u $USER -p$PASS -S $SOCKET students < /dev/nullcreate table students(id int,name varchar(100),mark int,dept varchar(4));EOF[ $? -eq 0 ] && echo Created table students || echo Table students already existmysql -u $USER -p$PASS -S $SOCKET students <

脚本B、将数据插入数据表的脚本如下:

#!/bin/bash#filename : write_to_db.sh#use : read data from csv files and insert into mysql dbUSER="root"PASS="123456"SOCKET="/data/mysqldata/3306/mysql.sock"if [ $# -ne 1 ];then echo $0 DATAFILE echo exit 2fidata=$1while read line;do oldIFS=$IFS IFS=, values=($line) values[1]="\"`echo ${values[1]} | tr # `\"" values[3]="\"`echo ${values[3]}`\"" query=`echo ${values[@]} | tr # , ` IFS=$oldIFSmysql -u $USER -p$PASS -S $SOCKET students <

脚本C、查询数据库的脚本如下:

#!/bin/bash#filename: read_db.sh#use : read data from mysql dbUSER="root"PASS="123456"SOCKET="/data/mysqldata/3306/mysql.sock"depts=`mysql -u $USER -p$PASS -S $SOCKET students <<eof -n="" 2="" :="" by="" d="" department="" dept="" distinct="" do="" echo="" for="" from="" in="" mark="" order="" pre="" result="`mysql -u $USER -p$PASS -S $SOCKET students <

<eof -n="" 2="" :="" by="" d="" department="" dept="" distinct="" do="" echo="" for="" from="" in="" mark="" order="" pre="" result="`mysql -u $USER -p$PASS -S $SOCKET students <

<eof -n="" 2="" :="" by="" d="" department="" dept="" distinct="" do="" echo="" for="" from="" in="" mark="" order="" pre="" result="`mysql -u $USER -p$PASS -S $SOCKET students <

脚本按照顺序执行结果如下:

# chmod +x create_db.sh write_to_db.sh read_db.sh# ./create_db.sh DB already existTable students already exist# # ./write_to_db.sh studentdata.csv Wrote data into DB# # ./read_db.sh Department : CSrank name mark1 Navin M 982 Nawaz O 803 Kavya N 70Department : ECrank name mark1 Hari S 802 Neenu J 703 Alex M 504 Bob A 30Department : AErank name mark1 Anu M 902 Sruthi 893 Andrew 89

<eof -n="" 2="" :="" by="" d="" department="" dept="" distinct="" do="" echo="" for="" from="" in="" mark="" order="" pre="" result="`mysql -u $USER -p$PASS -S $SOCKET students <

<eof -n="" 2="" :="" by="" d="" department="" dept="" distinct="" do="" echo="" for="" from="" in="" mark="" order="" pre="" result="`mysql -u $USER -p$PASS -S $SOCKET students <

在MySQL数据库中确认插入后结果:

mysql> mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || students || test|+--------------------+5 rows in set (0.00 sec)mysql> mysql> use students;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> mysql> show tables;+--------------------+| Tables_in_students |+--------------------+| students |+--------------------+1 row in set (0.00 sec)mysql> mysql> select * from students;+------+---------+------+------+| id | name | mark | dept |+------+---------+------+------+| 1 | Navin M | 98 | CS || 2 | Kavya N | 70 | CS || 3 | Nawaz O | 80 | CS || 4 | Hari S | 80 | EC || 5 | Alex M | 50 | EC || 6 | Neenu J | 70 | EC || 7 | Bob A | 30 | EC || 8 | Anu M | 90 | AE || 9 | Sruthi | 89 | AE || 10 | Andrew | 89 | AE |+------+---------+------+------+10 rows in set (0.00 sec)mysql>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。