python把mysql数据库的数据表数据写入csv文件中
mysql数据库是一个关联型数据库,数据库中可以存放很多数据表,这次我演示的是把数据库中的数据表读取出来,然后写入csv文件中。
导入模块
import pymysql
from pprint import pprint
import pandas
这次使用到三个模块,pprint模块是为了让打印出来的数据更加工整。
读取数据库
class Mysql_csv(object):
def __init__(self):
#读取数据库和建立游标对象
self.connect = pymysql.connect(host="127.0.0.1",port=3306,user="root",password="数据库密码",database="python-04",charset="utf8")
self.cursor = self.connect.cursor(cursor=pymysql.cursors.DictCursor)
我是使用面向对象的风格来编写代码的,所以首先要先建立一个类,首先我们先开启数据库,然后在用cursor建立一个游标对象,游标对象是用于后面的对数据的增、删、改、查的。
在使用数据库前,要先下载mysql服务器,然后要建立数据库才能使用数据库,这个可以上网上百度。
host传递的对象是你服务器的ip,也可以填localhost。
port是传递端口号,一般都是3306。
user传递的是用户,如果你的服务器在你的电脑上,一般都是root。
password传递的是你的数据库密码,这行代码我没有填上我的数据密码。
databases传递的是你要使用哪个数据库。
charset是编码格式,一般都是用utf8,记得不要填utf-8。
cursor里面的参数,是把你读取的数据转化为字典类型,这更方便等下写把数据写入csv文件。
读取数据表的数据
def read(self):
#读取数据库的所有数据
data = self.cursor.execute("""select * from goods""")
field_2 = self.cursor.fetchall()
# pprint(field_2)
return field_2
execute(“”“select * from goods”””),execute里面的参数是sql语句,这个语句是把goods数据表中的所有数据读取出来,执行完这一句,还要执行这一句field_2 = self.cursor.fetchall(),才能读取所有的数据,最后返回值是field_2
写入csv文件
def write(self):
#将数据转化成DataFrame数据格式
data = pandas.DataFrame(self.read())
#把id设置成行索引
data_1 = data.set_index("id",drop=True)
#写写入数据数据
pandas.DataFrame.to_csv(data_1,"I:/crack/DATA/mysql.csv",encoding="utf_8_sig")
print("写入成功")
用DataFrame把数据读取的数据转化成DataFrame二维数组类型,因为行索引在转化的过程中自动生成了,所以要重新为他定义行索引,因为在数据表中的id字段是主键,所以我就把id设为行索引,然后在用drop对象把id列删除。因为内容有中文,所以要用编码utf_8_sig,注意这里如果用utf-8是不能显示中文的,我已经试过来,要用utf_8sig格式才行。
关闭数据库和游标
def __del__(self):
self.connect.close()
self.cursor.close()
这里使用一个del方法,在整个程序运行完了之后再调用这个方法,来关闭数据库和游标
封装
def main():
write = Mysql_csv()
write.write()
if __name__ == '__main__':
main()
源代码
import pymysql
from pprint import pprint
import pandas
class Test_myqsl(object):
#运行数据库和建立游标对象
def __init__(self):
self.connect = pymysql.connect(host="127.0.0.1", port=3306, user="root", password="1505294687", database="python-04",
charset="utf8")
# 返回一个cursor对象,也就是游标对象
self.cursor = self.connect.cursor(cursor=pymysql.cursors.DictCursor)
#关闭数据库和游标对象
def __del__(self):
self.connect.close()
self.cursor.close()
def write(self):
#将数据转化成DataFrame数据格式
data = pandas.DataFrame(self.read())
#把id设置成行索引
data_1 = data.set_index("id",drop=True)
#写写入数据数据
pandas.DataFrame.to_csv(data_1,"I:/crack/DATA/mysql.csv",encoding="utf_8_sig")
print("写入成功")
def read(self):
#读取数据库的所有数据
data = self.cursor.execute("""select * from goods""")
field_2 = self.cursor.fetchall()
# pprint(field_2)
return field_2
#封装
def main():
write = Test_myqsl()
write.write()
if __name__ == '__main__':
main()