pymysql查询数据导出到csv文本中

该博客介绍了一个Python工具,用于在没有图形化数据库管理工具的情况下,执行SQL查询并将结果保存到CSV文件。通过Exec_Mysql类连接MySQL数据库,执行SQL语句并获取数据,然后利用writer_csv函数将数据写入CSV。工具主要涉及pymysql和csv模块,适用于数据导出场景。
摘要由CSDN通过智能技术生成

在没有数据库图形化界面工具时使用

# encoding: utf-8
# author: HermanTang
# date: 2021-07-14
"""
本工具功能为:将sql语句中查询到的数据导入到csv文本中
使用的模块: pymysql、csv
工具主要分部分:
	1、Exec_Mysql类,用于执行sql语句,并将sql语句查询到的数据返回
	2、writer_csv函数,主要是将接受到的数据写入到csv文本中
"""
import pymysql
import csv

class Exec_Mysql():
    """
    用于连接查询mysql数据库
    """
    def __init__(self, host, user, pwd, database, port=3306):
        self.db = pymysql.connect(host=host, user=user, port=port, password=pwd, db=database, charset='utf8')
        # self.cursor = self.db.cursor(cursor=pymysql.cursors.DictCursor)     # 加上配置cursor=pymysql.cursors.DictCursor,为了使查询到的数据以字典的方式返回,每个值对应字段
        self.cursor = self.db.cursor()
    def exec_sql(self, sql):
        """
        执行sql语句,然后将查询到的值返回
        :param sql:
        :return:
        """
        try:
            self.cursor.execute(sql)                #
            self.db.commit()                        # 提交
            data = self.cursor.fetchall()           # 接收查询到所有值
            desc = self.cursor.description
            return data, desc
        except Exception as e:
            self.db.rollback()          # 这是执行失败进行的回滚
            print(u"执行sql:{}语句错误:{}".format(sql, e))
    def close(self):
        self.db.close()

def writer_csv(filename, data, desc):
	"""
    将获取到的数据写入到csv文本中
    :param filename:    csv文本名
    :param data:        查询到的数据
    :param desc:        查询到的表字段,
    :return: 
    """
    title = []
    new_data = []
    for i in desc:
        if i[0] not in title:
            title.append(i[0])
    for info in data:
        if list(info) not in new_data:
            new_data.append(list(info))
    with open(filename, 'w')as f:
        f_csv = csv.writer(f)
        f_csv.writerow(title)
        f_csv.writerows(new_data)

if __name__ == '__main__':
    filename = "test.csv"
    sql = "SELECT * from user"
    mysql = Exec_Mysql("ip", "用户", "密码", "mysql") # 端口默认是3306,非默认端口可传参定义,不传则是3306
    data, desc = mysql.exec_sql(sql)
    mysql.close()		# 关闭mysql连接
    if data and desc:	# 判断是否有返回值
        writer_csv(filename, data, desc)
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值