Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python将CSV输出导出并映射到MySQL表_Python_Mysql_Csv_Cron_Iperf - Fatal编程技术网

使用Python将CSV输出导出并映射到MySQL表

使用Python将CSV输出导出并映射到MySQL表,python,mysql,csv,cron,iperf,Python,Mysql,Csv,Cron,Iperf,我有一个多客户端到单服务器双向iperf设置,用于网络监控。iperf服务器运行良好,并根据客户端写入的cron作业以CSV格式显示输出 我希望编写一个python脚本来自动化将这些CSV输出映射到MySQL数据库的过程;反过来,这些数据将定期更新和保存,无需人工干预 我使用Ubuntu 13.10机器作为iperf服务器。下面是我得到的CSV输出示例。这不是存储到文件中,而是显示在屏幕上 s1:~$ iperf -s -y C 20140422105054,172.16.10.76,410

我有一个多客户端到单服务器双向iperf设置,用于网络监控。iperf服务器运行良好,并根据客户端写入的cron作业以CSV格式显示输出

我希望编写一个python脚本来自动化将这些CSV输出映射到MySQL数据库的过程;反过来,这些数据将定期更新和保存,无需人工干预

我使用Ubuntu 13.10机器作为iperf服务器。下面是我得到的CSV输出示例。这不是存储到文件中,而是显示在屏幕上

s1:~$ iperf -s -y C  
20140422105054,172.16.10.76,41065,172.16.10.65,5001,6,0.0-20.0,73138176,29215083
20140422105054,172.16.10.76,5001,172.16.10.65,56254,4,0.0-20.0,46350336,18502933
20140422105100,172.16.10.76,54550,172.16.10.50,5001,8,0.0-20.0,67895296,27129408
20140422105100,172.16.10.76,5001,172.16.10.50,58447,5,0.0-20.1,50937856,20292796
20140422105553,172.16.10.76,5001,172.16.10.65,47382,7,0.0-20.1,51118080,20358083
20140422105553,172.16.10.76,41067,172.16.10.65,5001,5,0.0-20.1,76677120,30524007
20140422105600,172.16.10.76,5001,172.16.10.50,40734,4,0.0-20.0,57606144,23001066
20140422105600,172.16.10.76,54552,172.16.10.50,5001,8,0.0-20.0,70123520,28019115
20140422110053,172.16.10.76,41070,172.16.10.65,5001,5,0.0-20.1,63438848,25284066
20140422110053,172.16.10.76,5001,172.16.10.65,46462,6,0.0-20.1,11321344,4497094
我想将它们映射到的字段是:时间戳、服务器ip、服务器端口、客户端ip、客户端端口、标记id、间隔、传输、带宽

我想定期将这个CSV输出映射到MySQL数据库,我知道我必须在一个cron作业中编写一个Python脚本来查询和存储MySQL数据库。我是Python脚本和数据库查询的初学者


我在[;上讨论了关于服务器故障的另一个讨论,并希望在此基础上构建我的查询。

如果您计划使用Python,那么我建议使用

一般做法是:

定义类,该类具有要存储的所有属性 将类的所有属性映射到数据库列和类型 使用csv模块从csv中读取数据,为每一行创建相应的对象,该对象是之前准备的类,并将其存储。 sqlalchemy将为您提供更多的细节和说明,您的要求似乎相当简单


另一个选择是找到一个现有的csv导入工具,有些已经可以在MySQL中使用,还有很多其他工具。

这可能不是您想要的答案,但是如果您学习了一点sqlite3—一个本地Python模块—通过在线上做一个基础教程导入sqlite3,您会意识到您的问题并不是这样的很难解决。然后只需使用标准计时器,例如time.sleep来重复该过程。

生成SQL脚本,然后运行它 如果您不想使用像sqlalchemy这样的复杂解决方案,那么下面的方法是可能的

将csv数据转换为SQL脚本 使用mysql命令行工具运行此脚本 在您第一次这样做之前,请确保您在我留给您的数据库中创建了所需的数据库结构

以下示例仅用于我的便利软件包docopt,因此您需要安装它:

$ pip install docopt
CSV到SQL脚本转换实用程序 csv2sql.py:

将其全部放在data.sql文件中:

将data.sql应用于MySQL数据库 最后使用mysql提供的mysql命令导入数据库:

$ myslq --user username --password password db_name < data.sql 

是的,MySQL已经从CSV工具导入;但我的IPERF工具只显示CSV数据——我不确定它存储在哪里。因此,基于此,我想自动从IPERF工具收集CSV数据,并定期将其放入MySQL数据库。你知道其他工具可以帮助我实现这一目标吗?你可以将输出重定向到类似$iperf-s-y C>data.csv如果您为数据库中的csv导入准备了所需的表结构,并使用myslq提供的csv导入工具,您可以用非常直接的方式进行操作-这听起来不错。Jan,我尝试了您提供的上述Python脚本。我不断遇到以下语法错误。您能帮助排除故障吗?我尝试更改语法并查看是否有其他结果。此外,出于好奇,Python脚本是否需要结束模块类型语句?-----文件csv2sql.py,第22行print sql.formattablename=tablename,**rec^SyntaxError:无效语法------我的代码使用Python 2.7运行。如果您使用的是Python 3.x,请使用print语句不能更改为函数调用,如printsql.formattablename=tablename=tablename,**rec。我将重写代码以在两个Verison中运行。奇怪的错误:s1:~$python csv2sql.py iperf2.csv>iperf2.sql文件csv2sql.py,第22行printsql.formattablename=tablename,**rec TabError:不一致的用法of缩进中的制表符和空格。我使用了与您指导相同的语法。最后一个错误与您的编辑器有关。关闭“使用制表符”并将所有现有制表符替换为4个字符。我仍然收到缩进/制表符错误。我正在使用gedit。请您建议另一个编辑器。我不太习惯使用vim。
$ python csv2sql.py -h
Usage:
    csv2sql.py [--table <tablename>] <csvfile>

Options:
    --table <tablename>  Name of table in database to import into [default: mytable]

Convert csv file with iperf data into sql script for importing
those data into MySQL database.
$ python csv2sql.py data.csv 
insert into mytable
    values (20140422105054,"172.16.10.76",41065,"172.16.10.65",5001,6,"0.0-20.0",73138176,29215083);
insert into mytable
    values (20140422105054,"172.16.10.76",5001,"172.16.10.65",56254,4,"0.0-20.0",46350336,18502933);
insert into mytable
    values (20140422105100,"172.16.10.76",54550,"172.16.10.50",5001,8,"0.0-20.0",67895296,27129408);
insert into mytable
    values (20140422105100,"172.16.10.76",5001,"172.16.10.50",58447,5,"0.0-20.1",50937856,20292796);
insert into mytable
    values (20140422105553,"172.16.10.76",5001,"172.16.10.65",47382,7,"0.0-20.1",51118080,20358083);
insert into mytable
    values (20140422105553,"172.16.10.76",41067,"172.16.10.65",5001,5,"0.0-20.1",76677120,30524007);
insert into mytable
    values (20140422105600,"172.16.10.76",5001,"172.16.10.50",40734,4,"0.0-20.0",57606144,23001066);
insert into mytable
    values (20140422105600,"172.16.10.76",54552,"172.16.10.50",5001,8,"0.0-20.0",70123520,28019115);
insert into mytable
    values (20140422110053,"172.16.10.76",41070,"172.16.10.65",5001,5,"0.0-20.1",63438848,25284066);
insert into mytable
    values (20140422110053,"172.16.10.76",5001,"172.16.10.65",46462,6,"0.0-20.1",11321344,4497094);
$ python csv2sql.py data.csv > data.sql
$ myslq --user username --password password db_name < data.sql