search
HomeDatabaseMysql Tutorial使用bash将csv文件数据读写到MySQL数据库的脚本之一_MySQL



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

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

 

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
 

 


脚本思路
这个问题有两种处理思路,从shell脚本的角度看,可以用sort,awk等bash工具解决,也可以用一个sql数据库的数据表也可以解决。
下面需要编写3个脚本,分别用于创建数据库及数据表、想数据表中插入学生数据、从数据表中读取并显示处理过的数据。

注意:下面脚本中mysql数据连接的user,pass,socket等变量是我测试环境中的连接,在使用脚本时可以根据情况修改;
另外对于实际导入的csv格式和行数不同,可以对照进行脚本中的数据库名、表名、列名进行修改,这样这三个脚本就可以解决这一类问题了。


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

 

#!/bin/bash
#filename : create_db.sh
#use : create mysql database and tables

USER="root"
PASS="123456"
SOCKET="/data/mysqldata/3306/mysql.sock"

mysql -u $USER -p$PASS -S $SOCKET <<eof 2=""> /dev/null
create database students;
EOF

[ $? -eq 0 ] && echo Created DB || echo DB already exist
mysql -u $USER -p$PASS -S $SOCKET students <<eof 2=""> /dev/null
create table students(
id int,
name varchar(100),
mark int,
dept varchar(4)
);
EOF

[ $? -eq 0 ]  && echo Created table students || echo Table students already exist

mysql -u $USER -p$PASS -S $SOCKET students <<eof delete="" from="" pre=""></eof></eof></eof>
<eof 2=""><eof 2=""><eof delete="" from="" pre=""></eof></eof></eof>
<eof 2=""><eof 2=""><eof delete="" from="" pre=""><p> </p><p>

<strong>脚本二、将数据插入数据表的脚本如下:</strong></p><p> </p><pre class="prebrush">#!/bin/bash
#filename : write_to_db.sh
#use : read data from csv files and insert into mysql db

USER="root"
PASS="123456"
SOCKET="/data/mysqldata/3306/mysql.sock"

if [ $# -ne 1 ];
then
    echo $0 DATAFILE
    echo
    exit 2
fi
data=$1

while read line;
do
    oldIFS=$IFS
    IFS=,
    values=($line)
    values[1]="\"`echo ${values[1]} | tr &#39; &#39; &#39;#&#39; `\""
    values[3]="\"`echo ${values[3]}`\""

    query=`echo ${values[@]} | tr &#39; #&#39; &#39;, &#39; `
    IFS=$oldIFS
                                            
    mysql -u $USER -p$PASS -S $SOCKET students <<eof data="" echo="" eof="" insert="" into="" pre="" students="" wrote=""></eof>
<eof data="" echo="" eof="" insert="" into="" pre="" students="" wrote=""></eof>
<eof data="" echo="" eof="" insert="" into="" pre="" students="" wrote=""><p> </p><p>

<strong>脚本三、查询数据库的脚本如下:</strong></p><p> </p><pre class="prebrush">#!/bin/bash
#filename: read_db.sh
#use : read data from mysql db

USER="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
SET @i:=0;
select @i:=@i+1 as rank,name,mark from students where dept=" select="" tail=""></eof>
<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
SET @i:=0;
select @i:=@i+1 as rank,name,mark from students where dept=" select="" tail=""></eof>
<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
SET @i:=0;
select @i:=@i+1 as rank,name,mark from students where dept=" select="" tail=""><p> </p><p><strong>脚本按照顺序执行结果如下:</strong></p><p> </p><pre class="prebrush"># chmod +x create_db.sh write_to_db.sh read_db.sh
# ./create_db.sh                                             
DB already exist
Table students already exist
# 
# ./write_to_db.sh studentdata.csv       
Wrote data into DB
# 
# ./read_db.sh                         
Department : CS
rank    name    mark
1       Navin M 98
2       Nawaz O 80
3       Kavya N 70

Department : EC
rank    name    mark
1       Hari S  80
2       Neenu J 70
3       Alex M  50
4       Bob A   30

Department : AE
rank    name    mark
1       Anu M   90
2       Sruthi  89
3       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
SET @i:=0;
select @i:=@i+1 as rank,name,mark from students where dept=" select="" tail=""></eof>
<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
SET @i:=0;
select @i:=@i+1 as rank,name,mark from students where dept=" select="" tail=""><p> </p><p>
<strong>在MySQL数据库中确认插入后结果:</strong></p><p> </p><pre class="prebrush">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 names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> 
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> 

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
每5分钟执行一次的Python脚本每5分钟执行一次的Python脚本Sep 10, 2023 pm 03:33 PM

自动化和任务调度在简化软件开发中的重复任务方面发挥着至关重要的作用。想象一下,有一个Python脚本需要每5分钟执行一次,例如从API获取数据、执行数据处理或发送定期更新。如此频繁地手动运行脚本可能非常耗时并且容易出错。这就是任务调度的用武之地。在这篇博文中,我们将探讨如何安排Python脚本每5分钟执行一次,确保它自动运行而无需手动干预。我们将讨论可用于实现此目标的不同方法和库,使您能够有效地自动化任务。使用time.sleep()函数每5分钟运行一次Python脚本的一种简单方法是利用tim

Python脚本关闭计算机Python脚本关闭计算机Aug 29, 2023 am 08:01 AM

在当今快节奏的数字世界中,能够自动执行计算机任务可以极大地提高生产力和便利性。其中一项任务是关闭计算机,如果手动完成,这可能会非常耗时。值得庆幸的是,Python为我们提供了一套强大的工具来与系统交互并自动执行此类任务。在这篇博文中,我们将探讨如何编写Python脚本来轻松关闭计算机。无论您是想安排自动关机、远程启动关机,还是只是通过避免手动关机来节省时间,此脚本都会派上用场。导入所需的模块在开始编写脚本之前,我们需要导入必要的模块,以便与系统交互并执行关闭命令。在本节中,我们将导入os模块(它

Python 脚本打包 exe,auto-py-to-exe 来帮你!Python 脚本打包 exe,auto-py-to-exe 来帮你!Apr 13, 2023 pm 04:49 PM

一. 什么是auto-py-to-exeauto-py-to-exe 是一个用于将Python程序打包成可执行文件的图形化工具。本文就是主要介绍如何使用 auto-py-to-exe 完成 python 程序打包。auto-py-to-exe 基于 pyinstaller ,相比于 pyinstaller ,它多了 GUI 界面,用起来更为简单方便二. 安装 auto-py-to-exe首先我们要确保我们的 python 环境要大于或等于 2.7 然后在 cmd 里面输入:pip install

Python脚本重启计算机Python脚本重启计算机Sep 08, 2023 pm 05:21 PM

重新启动计算机是一项常见任务,我们经常执行此任务来解决问题、安装更新或应用系统更改。虽然重新启动计算机的方法有很多种,但使用Python脚本可以提供自动化和便利性。在本文中,我们将探讨如何创建一个可以通过简单执行来重新启动计算机的Python脚本。我们将首先讨论重新启动计算机的重要性及其带来的好处。然后,我们将深入研究Python脚本的实现细节,解释所涉及的必要模块和功能。在整篇文章中,我们将提供详细的解释和代码片段,以确保清晰的理解。重新启动计算机的重要性重新启动计算机是基本的故障排除步骤,可

超硬核!11个非常实用的 Python 和 Shell 拿来就用脚本实例!超硬核!11个非常实用的 Python 和 Shell 拿来就用脚本实例!Apr 12, 2023 pm 01:52 PM

Python 脚本部分实例:企业微信告警、FTP 客户端、SSH 客户端、Saltstack 客户端、vCenter 客户端、获取域名 ssl 证书过期时间、发送今天的天气预报以及未来的天气趋势图;Shell 脚本部分实例:SVN 完整备份、Zabbix 监控用户密码过期、构建本地 YUM 以及上篇文章中有读者的需求(负载高时,查出占用比较高的进程脚本并存储或推送通知);篇幅有些长,还请大家耐心翻到文末,毕竟有彩蛋。Python 脚本部分企业微信告警此脚本通过企业微信应用,进行微信告警,可用于

五个方便好用的Python自动化脚本五个方便好用的Python自动化脚本Apr 11, 2023 pm 07:31 PM

相比大家都听过自动化生产线、自动化办公等词汇,在没有人工干预的情况下,机器可以自己完成各项任务,这大大提升了工作效率。编程世界里有各种各样的自动化脚本,来完成不同的任务。尤其Python非常适合编写自动化脚本,因为它语法简洁易懂,而且有丰富的第三方工具库。这次我们使用Python来实现几个自动化场景,或许可以用到你的工作中。1、自动化阅读网页新闻这个脚本能够实现从网页中抓取文本,然后自动化语音朗读,当你想听新闻的时候,这是个不错的选择。代码分为两大部分,第一通过爬虫抓取网页文本呢,第二通过阅读工

Python脚本注销计算机Python脚本注销计算机Sep 05, 2023 am 08:37 AM

在当今的数字时代,自动化在简化和简化各种任务方面发挥着至关重要的作用。其中一项任务是注销计算机,这通常是通过从操作系统的用户界面中选择注销选项来手动完成的。但是,如果我们可以使用Python脚本自动执行此过程呢?在这篇博文中,我们将探讨如何创建一个Python脚本,只需几行代码就可以注销计算机。在本文中,我们将逐步介绍创建用于注销计算机的Python脚本的过程。我们将介绍必要的先决条件,讨论以编程方式注销的不同方法,并提供编写脚本的分步指南。此外,我们将解决特定于平台的注意事项,并重点介绍最佳实

五个鲜为人知的现代 Bash 脚本编写技术五个鲜为人知的现代 Bash 脚本编写技术Jun 26, 2023 pm 08:36 PM

程序员经常使用Bash命令语言创建Shell脚本来自动化手动任务。例如,他们会为各种配置、文件操作、生成构建结果和各种与DevOps相关的活动创建Bash脚本。几乎所有类Unix或基于Unix的操作系统都为用户提供预安装的Bash解释器,因此我们可以使用Bash编写更具可移植性的自动化脚本。正如我们已经知道的那样,Bash脚本编写是指使用Bash命令语言的语法、内置Bash命令和核心操作系统CLI程序(如GNU核心工具)编写一系列命令。标准且老式的Bash脚本通常执行一些命令并在终端上显示纯文本

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use