在没有数据库图形化界面工具时使用
# 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)