Python2.x 脚本批量串行select查询数据库,格式化输出到txt文件_weixin_34056162的博客-程序员宅基地

技术标签: python  开发工具  数据库  

    个人习惯脚本目录、文件存放目录如下:

    Python脚本及读取文件存放目录:/root/python

    脚本执行select后生成的文件目录:/root/select

    话不多说,上主脚本:

    # vim  /root/python/connectMySQL.py

-----------------------------------------------------------------------------------------------------------------------------------

# -*- coding: utf-8 -*-
import MySQLdb
import sys
import os
import time

print
mysql_host="127.0.0.1"  # 数据库ip地址
mysql_user="root"  #  数据库用户名
mysql_password="123456"  # 数据库用户密码

select_dir="/root/select" + "/" + str(time.strftime('%Y%m%d',time.localtime(time.time()))) # 数据库查询结果存放的根目录

def SelectInfo(sql):  # 连接数据并执行SQL语句的函数
    conn = MySQLdb.connect(mysql_host,mysql_user,mysql_password)  # 连接数据库
    cur = conn.cursor()  # 打开数据库命令行的游标
    cur.execute("set names latin1") # 强制设置客户端连接数据库字符集为 latin1
    cur.execute(sql)  # 执行SQL语句
    result = cur.fetchall()  # 取出SQL语句执行后的数据结果集
    title = cur.description  # 取出SQL语句执行后的数据表头信息
    cur.close()  # 关闭数据库命令行的游标
    conn.close()  # 关闭数据库连接
    return title,result  # 将数据库结果集返回给函数

if not os.path.exists(select_dir):  # 判断select_dir是否存在,如果不存在就创建该目录
    os.makedirs(select_dir)

if len(sys.argv) <= 1:
    sqlStr = ''
    for i in open('select.sql','r').readlines():
        if i.startswith('#') == True:  # 忽略掉#号开头的行
            pass
        else:
            sqlStr = sqlStr + i
    reSql = sqlStr.split(';')  # 将所有的sql语句赋值给reSql; select.sql文件里的sql语句要以';'结尾

    for sql in range(len(reSql)-1):
        if sql % 2 == 0:
            title = SelectInfo(reSql[sql])[0]  # 取出表头结果集
            result = SelectInfo(reSql[sql])[1]  # 取出数据结果集

            filename = str(select_dir) + "/" + str(" ".join(reSql[sql+1].split()))  # 格式化txt文件名字,避免出现 \n(回车)  (空格) 等字符
            f = open(filename, 'a+')  # 打开并准备往文件中追加,w+ 为写,r+为读,a+为追加
            if not os.path.getsize(filename):
                for j in range(len(title)):  # 遍历表头结果集,取出数据库对应列名称
                    print >> f,str(title[j][0]) + "\t",
                print >> f  # 表头写到txt后换行
            for line in range(len(result)):  # 遍历数据结果集,取出每一行数据
                for k in range(len(result[line])):
                    print >> f,str(result[line][k]) + "\t",
                print >> f
            print "%s has OK!" % filename
elif len(sys.argv) >= 3:
    title = SelectInfo(sys.argv[1])[0]
    result = SelectInfo(sys.argv[1])[1]
    filename = str(select_dir) + "/" + str(" ".join(sys.argv[2].split()))
    f = open(filename, 'a+')
    if not os.path.getsize(filename):
        for j in range(len(title)):
            print >> f,str(title[j][0]) + "\t",
        print >> f
    for line in range(len(result)):
        for k in range(len(result[line])):
            print >> f,str(result[line][k]) + "\t",
        print >> f
    print "%s has OK!" % filename
else:
    print "输入有误,参数不足!"

print

-----------------------------------------------------------------------------------------------------------------------------------

    上面的脚本提供了两种使用方法:

   【 方法一:命令行传参数,脚本运行一次只处理一条select语句】

    命令行格式:python   connectMySQL.py   "select ......"   生成的文件名

    举例如下(这里select整句话一定要用""引号引起来):

    查看生成的文件:

110124_ploG_2853264.png

 

    【方法二:将select语句写入select.sql文件中,脚本运行一次处理全部select.sql中的select语句】

    文件格式如下图(#为注释,select以;分号结尾,紧跟文件名,也是分号结尾;换行另一句select):

    命令行直接执行(无需任何参数):python   connectMySQL.py

    查看执行结果:

转载于:https://my.oschina.net/jamieliu/blog/756702

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34056162/article/details/91948402

智能推荐

linux端口的开启与关闭_我爱素妍的博客-程序员宅基地

$ netstat -anp | grep :22tcp   0    0 0.0.0.0:22      0.0.0.0:*     LISTEN     1666/sshd# -a 显示所有活动的TCP连接,以及正在监听的TCP和UDP端口# -n 以数字形式表示地址和端口号,不试图去解析其名称(number)# -p 列出与端口监听或连接相关的进程(有个地方需要注

Lucene学习总结_g-Jack的博客-程序员宅基地

数据分类结构化数据:有固定类型或者有固定长度的数据例如:数据库中的数据(mysql,oracle等), 元数据(就是windows中的数据)结构化数据搜索方法:数据库中数据通过sql语句可以搜索元数据(windows中的)通过windows提供的搜索栏进行搜索 非结构化数据:没有固定类型和固定长度的数据

Java学习日报—消息队列—2021/11/23_来者__的博客-程序员宅基地

MQ的使用一般是用于系统解耦、异步通信和流量削峰。除此之外,还有延迟通知、最终一致性保证、顺序消息、流式处理等等。

kmeans算法中的sse_K-Means聚类算法(理论篇)_塔图阿姆的博客-程序员宅基地

K-means算法是机器学习/数据挖掘领域广泛使用的聚类算法,它是一个无监督学习算法,即无需对样本进行事先标记。K-means算法通俗来说主要完成一件事:给定一个包含n个点的数据集,把该数据集划分到k个聚类中,使得各个聚类所包含的每个点到各自聚类中心的距离均小于与其他聚类中心的距离。K-Means算法(一)算法过程1)确定要划分的聚类个数(K),从数据集D中任意选出K个点作为聚类中心2)计算所有点...

android 底部弹窗失效,[flutter]设置底部弹窗点击外部不消失,兼容ios CupertinoScaffold与android Scaffold..._高考数学呆哥的博客-程序员宅基地

freddon发表于2019-08-13阅读 2209 |评论 0默认showModalBottomSheet底部弹窗,点击以外的蒙层会造成弹窗关闭,于是采用showBottomSheet来实现。默认的showModalBottomSheet是这样:```showModalBottomSheet(builder:(BuildContext rootContext) =&gt;StatefulBui...

(四)快速入门IntelliJ IDEA软件安装以及使用_Luosihuo的博客-程序员宅基地_idea软件怎么使用

IDEA软件安装以及使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录IDEA软件安装以及使用前言一、开发工具概述二、 IDEA软件安装三、 IDEA的项目结构介绍四、 创建包和类五、 字体设置六、IDEA的项目目录七、 IDEA常用快捷键八、IDEA修改快捷键九、 IDEA导入和关闭项目总结前言提示:以下是本篇文章正文内容,参考黑马教材,下面案例可供参考一、开发工具概述IDEA是一个专门针对Java的集成开发工具(IDE),由Java语言编写。所以,需要有JRE

随便推点

FreeCodeCamp----Scientific Computing with Python Projects----time-calculator_play maker的博客-程序员宅基地

AssignmentWrite a function named add_time that takes in two required parameters and one optional parameter:a start time in the 12-hour clock format (ending in AM or PM)a duration time that indicates the number of hours and minutes(optional) a starting

架构之路_深度探索C++对象模型总结_沉默的舞台剧的博客-程序员宅基地_深度探索c++

本文主要参照《深度探索C++对象模型》一书。一、关于对象C语言中,数据和处理数据的操作(函数)是分开声明的,不支持数据函数之间的关联性,称之为程序性的(procedural)。1.1 对象类型C++中可以通过独立抽象数据类型实现。比如:class Point3d { public: Point3d( float x = 0.0, float y = 0.0, float z = 0.0 ): _x(x), _y(y), _z(z){ } float x() { re

安装CentOS_不稳定记忆的博客-程序员宅基地

1. 检查BIOS虚拟化支持2. 新建虚拟机3. 新建虚拟机向导4. 创建虚拟空白光盘5. 安装Linux系统对应的CentOS版6. 虚拟机命名和定位磁盘位置7. 处理器配置,看自己是否是双核、多核8. 设置内存为2GB9. 网络设置NAT10. 选择IO控制器类型11. 选择磁盘类型12. 新建虚拟磁盘...

c语言练习题_秋风扫dota的博客-程序员宅基地

//1、定义一个结构体变量(包含年月 日),计算该日在本年中为第几天? 要求写一个days函数。参数是此结构 体类型的变量,返回值是整数。struct date {    int year;    int month;    int day;};int days(struct date da){    int _day=0;    for (in

slim php dd model,Slim PHP框架_黑科技玩机的博客-程序员宅基地

Slim是一个微框架。有一套和Lavarel很相似的路由机制。有一个很详细的教程,详细到把基础request变量都说得很详细,我会觉得这么微的框架还要谈及这么琐碎的功能,那它本身可能真没什么功能。不过理解这些功能对于PHP程序员打好基础很有好处。比如说,文档会提及ETag,有助于程序员更好地理解缓存知识。有中间件机制,有Hook机制。没有显示地描述MVC的设计,没有数据库ORM模型。PHP dev...

Python实现发送警告通知到企业微信方法详解_普通网友的博客-程序员宅基地_python企业微信通知

常见的报警方式有:邮件,电话,短信,微信。本文将介绍如何利用Python发送警告通知到企业微信,文中的示例代码有一定的参考价值,感兴趣的可以了解一下。编程资料点击免费领取目录1. 新建应用2. 获取Secret常见的报警方式有:邮件,电话,短信,微信。短信和电话,通常是收费的(若你有不收费的,可以评论分享一下),而邮件又不是那么及时,因此最后我选择微信通知。这里说的微信,是企业微信,而我之前注册过个体户的执照,因此可以很轻松就可以注册自己的企业微信。1. 新建应用登陆网页

推荐文章

热门文章

相关标签