Shell/Python实现Mysql读txt文本

文本:ttt.txt 共7774865条记录

显示部分文本内容如下:

"OBJECT_ID","OBJECT_NAME","CREATED"

"20","ICOL$","2013/10/9 18:23:42"

"46","I_USER1","2013/10/9 18:23:42"

"28","CON$","2013/10/9 18:23:42"

"15","UNDO$","2013/10/9 18:23:42"

"29","C_COBJ#","2013/10/9 18:23:42"

"3","I_OBJ#","2013/10/9 18:23:42"

"25","PROXY_ROLE_DATA$","2013/10/9 18:23:42"

"41","I_IND1","2013/10/9 18:23:42"

"54","I_CDEF2","2013/10/9 18:23:42"

"40","I_OBJ5","2013/10/9 18:23:42"

"26","I_PROXY_ROLE_DATA$_1","2013/10/9 18:23:42"

"17","FILE$","2013/10/9 18:23:42"

"13","UET$","2013/10/9 18:23:42"

"9","I_FILE#_BLOCK#","2013/10/9 18:23:42"

"43","I_FILE1","2013/10/9 18:23:42"

"51","I_CON1","2013/10/9 18:23:42"

"38","I_OBJ3","2013/10/9 18:23:42"

"7","I_TS#","2013/10/9 18:23:42"

"56","I_CDEF4","2013/10/9 18:23:42"

......

......

为了方便测试:

我们选取前10001行,共10000条数据(第一条为字段名)

[11:05:12 [email protected] Desktop]$ head -10001 ttt.txt > test.txt

如下是本人分别用python与shell编写的脚本,不代表脚本执行的方法是最优的,所作的比较仅为个人主观意见

1.Shell版

#!/bin/sh
#mysql_import.sh
#读ttt.txt文件,将其中各项写入数据库

i=0   #

###################设定新分隔符####################
SAVEDIFS=$IFS
IFS=‘,‘

#mysql连接函数
mysql_conn(){
mysql -e $1;
}

echo "Begin time: `date`"   #显示开始时间

################创建数据库myimport#################
mysql -e "drop database if exists myimport;"
#mysql_conn "drop database if exists myimport;"
mysql -e "create database myimport;"
#mysql_conn "create database myimport;"
#mysql -e "show databases;"

###############对ttt.txt进行处理###################
sed -e ‘s/\"//g‘ -e ‘s#/#-#g‘ ttt.txt >t.txt 

#i=0时,读文本第一行,创建表import_obj,设置i=1
#i=1,读文本其他行,插入数据到import_obj中
#逐行读数据,并通过mysql -e command插入到表中
while read ID NAME CREATED
do
if [ $i -eq 0 ]; then  
#echo $ID,$NAME,$CREATED
id=$ID
name=$NAME
created=$CREATED
mysql -e "create table if not exists myimport.import_obj(id int unsigned auto_increment primary key,$ID int unsigned unique not null,$NAME varchar(60) not null,$CREATED datetime not null);"
i=1
#mysql -e "desc myimport.import_obj;"
else 
#echo "$CREATED"
#mysql -e "select str_to_date($CREATED,‘%Y-%m-%d %H:%i:%s‘);"
mysql -e "insert into myimport.import_obj($id,$name,$created) value($ID,‘$NAME‘,‘$CREATED‘);"
fi
done <t.txt

echo "END time: `date`"  #显示结束时间

#mysql -e "select * from myimport.import_obj;"
rm -f t.txt  #删除临时文件
IFS=$SAVEDIFS  #还原分隔符

2.Python版(Python 2.7.5版本)

#!/usr/bin/python
# mysql_import.py

#使用MySQLdb去实现
import MySQLdb,os,time

os.system("sed -e ‘s/\"//g‘ -e ‘s#/#-#g‘ test.txt >t.txt");

try:
    print time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()))  #记录开始时间
    conn=MySQLdb.connect(host=‘127.0.0.1‘,user=‘root‘,passwd=‘zhang1992‘)
    print "conn success"
except:
    print "conn error!"
    exit()
cur=conn.cursor()
cur.execute(‘drop database if exists myimport‘)
cur.execute(‘create database myimport‘)
i=0
count=0
with open(‘t.txt‘,‘r‘) as ft:
    for row in ft.readlines():
        ID,NAME,CREATED=list(row.strip("\n").split(","))
        if i==0:
            cid=ID
            cname=NAME
            created=CREATED
            cur.execute("create table if not exists myimport.import_obj(id int unsigned auto_increment primary key,%s int unsigned unique not null,%s varchar(60) not null,%s datetime not null)"%(ID,NAME,CREATED))
            i=1
        else:
            sql="insert into myimport.import_obj(%s,%s,%s) value(%d,‘%s‘,‘%s‘)"%(cid,cname,created,int(ID),NAME,CREATED)
            cur.execute(sql)

os.system("rm -f t.txt")
cur.close()
conn.commit()
conn.close()

print time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()))  #记录结束始时间

3.测试

10000条数据测试

[11:08:32 [email protected] Desktop]$ bash mysql_import.sh          
Begin time: Tue Jul 19 11:08:35 CST 2016
End time: Tue Jul 19 11:11:50 CST 2016
[11:11:50 [email protected] Desktop]$ python mysql_import.py                       
2016-07-19 11:16:46
conn success
2016-07-19 11:16:52

python处理完整文本测试

[13:06:30 [email protected] Desktop]$ python mysql_import.py 
2016-07-19 13:06:35
conn success
2016-07-19 13:14:57
[13:14:57 [email protected] Desktop]$ mysql -e "select count(*) from myimport.import_obj";
+----------+
| count(*) |
+----------+
|   774864 |
+----------+

从上面的测试结果可以看出,python的效率明显高于shell。

shell无法保存mysql的连接状态,导致每执行一条插入语句都需要重新连接mysql及断开。这里的python中的MySQLdb通过事务,全部执行完毕才提交,一次提交完成那个所有的插入,节省连接与断开的时间。

时间: 2024-11-05 12:25:59

Shell/Python实现Mysql读txt文本的相关文章

python实例:三国演义TXT文本词频分析

0x00 前言 找不到要写什么东西了!今天有个潭州大牛讲师  说了个  文本词频分析 我基本上就照抄了一遍 中间遇到一些小小的问题 自我百度 填坑补全了  如下 : 效果演示 0x01   准备环境及介绍 python3.x版本   随意 安装jieba库 pip install jieba jieba三种模式: 1.精准模式 lcut函数,返回一个分词列表 2.全模式 3.搜索引擎模式 词频: <单词>:<出现次数>的键值对 IPO描述 imput output process

mysql导入txt文本数据

按照mysql官方文档指示下 创建数据库和表: mysql> create database menagrie; 然后创建表: 1 mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), 2 species VARCHAR(20), sex CHAR(1), birth DATE, death DATE); 然后将以下数据写入一个pet.txt文本中: Fluffy Harold cat f 1993-02-04 \NClaw

Python中读取txt文本出现:SyntaxError: (unicode error) &#39;unicodeescape&#39; codec can&#39;t decode bytes in position 2-3: truncated \UXXXXXXXX escape问题解决

windows中的路径是反斜杠\,然而反斜杠\在python中有着转义字符的意义,所以在py文件中写windows文件路径的时候,要特别注意反斜杠\的使用. 下面有三种解决方式: 1 # 方式一:转义的方式 2 'c:\\users\xxx\desktop\a.txt' 3 #方式二:显式声明字符串不用转义 4 r'c:\users\xxx\desktop\a.txt' 5 #方式三:使用linux的路径 6 'c:/users/xxx/desktop/a.txt' Python中读取txt文本

Python中将变量按行写入txt文本中

案例一: 讲数组a 循环写入名称为2.txt的文档中 # -*-coding:utf8-*- import requests from lxml import etree a=[1,2,3,4,5,6] print(a) for i in a: f = open('C:/Users/Beckham/Desktop/python/2.txt','a') f.write('\n'+str(i)) f.close() 脚本执行结果 脚本 f = open('C:/Users/Beckham/Deskt

Python操作MySQL数据库实例

在Windows平台上安装mysql模块用于Python开发 用python连接mysql的时候,需要用的安装版本,源码版本容易有错误提示.下边是打包了32与64版本. MySQL-python-1.2.3.win32-py2.7.exe MySQL-python-1.2.3.win-amd64-py2.7.exe 免费下载地址:http://yunpan.cn/cVnTc9iRsQR4m 访问密码 06fc 安装过程很简单不多说: 实例 1.取得 MYSQL 的版本 # -*- coding:

mysql存取大文本text和批处理数据

public class ReadWriteBigData { /* create database bigdata; use bigdata; create table bigdata //创建表 ( id varchar(20)primary key, pinglun text,(大数据) image blob(二进制) );*/ public void insert() { try{ Connection con=DBHelper.getConnection(); String sql="

Python操作Mysql实例代码教程在线版(查询手册)_python

实例1.取得MYSQL的版本 在windows环境下安装mysql模块用于python开发 MySQL-python Windows下EXE安装文件下载 复制代码 代码如下: # -*- coding: UTF-8 -*- #安装MYSQL DB for pythonimport MySQLdb as mdb con = None try:    #连接mysql的方法:connect('ip','user','password','dbname')    con = mdb.connect('

Python 12 - Mysql &amp; ORM

本节内容 1.数据库介绍 2.mysql数据库安装使用 3.mysql数据库基础 4.mysql命令 5.事务 6.索引 7.Python操作mysql 8.ORM sqlalchemy了解 数据库介绍 什么是数据库? (介于本人还是属于熟悉数据库的,这一块就基本复制粘贴了) 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库, 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据. 我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢.

python使用mysql数据库

一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的linux 仓库中都会有mysql ,我们只需要通过一个命令就可以下载安装: Ubuntu\deepin >>sudo apt-get install mysql-server >>Sudo apt-get install  mysql-client centOS/redhat >