需求:
连接数据库,读取数据库订单表的数据,并保存在csv文件中
第一次是这么写的:
#打开文件,存储数据
with open('output_data1.csv','w',newline ='') as file:
writeobj = csv.writer(file)
for row in results:
writeobj.writerow(row[0])
报错:
原因是,csv 的writerow 函数只能写入一个序列,比如 list 或 array。通过循环result保存的row[0]不是一个序列
writeobj.writerow(row[0])
_csv.Error: iterable expected, not int
修改:
下面直接保存游标获取的result,就可以了
import pymysql
import csv
"""
导入连接MySQL需要的包,没有安装pymysql需要先安装
使用命令行切换到python的安装路径下的scripts子目录下安装(pip install pymysql)
"""
#连接MySQL数据库
conn = pymysql.Connect(
host='xxxxxxxxxx', #数据库服务器地址/自己电脑本地localhost
port=3306, #端口号
user='xxxxxxxx', #数据库登录名
passwd='xxxxxx', #密码
db='xxxxxxxx', #数据库名称
charset='utf8' #字符集
)
#使用cursor()方法获取操作游标
cursor1 = conn.cursor()
#使用execute()方法执行sql语句
sql = 'select * from Purchase_Order_Main' #通过sql语句,筛选符合要求的数据库表数据
cursor1.execute(sql)
#使用fetchone()方法获取所有数据
results = cursor1.fetchall()
#方法一:只把results取到的数据库数据打印出来,没有格式
with open('output_data.csv','w') as file:
writeobj = csv.writer(file)
writeobj.writerow(results)
#方法二:整理导出来的表格数据格式
with open('output_data3.csv','w',encoding='gbk',newline="") as file:
writeobj = csv.writer(file)
#首行的字段名,字段名太多,只写了一部分
writeobj.writerow(["id", "order_number", "order_uuid"])
#把游标取得的results,转化成list类型,在把list里的订单数据写到文件里
for i in range(0,len(list(results))):
writeobj.writerow(results[i])
print(len(list(results))) #输出订单数量,作为参照
#关闭游标、数据库
cursor1.close()
conn.close()