(从个人理解写出,不妥之处请批评指正!)
在视频之前的代码基础上:
1.data_define.py未更改
2.file_define.py未更改
3.main.py有更改
具体如下:
1.data_define.py
"""
数据定义的类
"""
class Record:
def __init__(self, date, order_id, money, province):
self.date = date # 订单日期
self.order_id = order_id # 订单ID
self.money = money # 订单金额
self.province = province # 销售金额
def __str__(self):
return f'{self.date}, {self.order_id}, {self.money}, {self.province}'
2.file_define.py
"""
和文件相关的类定义
"""
import json
from data_define import Record
# 定义抽象类作顶层设计,确定需要实现的功能
class FileReader:
def read_data(self) -> list[Record]:
# 读取文件数据,并将每一条数据转换为Reader对象,都封装到list内返回
pass
# 子类一
class TextFileReader(FileReader):
def __init__(self, path):
self.path = path # 定义成员变量记录文件的路径
# 复写(实现抽象方法)父类的方法
def read_data(self) -> list[Record]:
f = open(self.path, 'r', encoding='utf-8')
record_list: list[Record] = []
for line in f.readlines():
line = line.strip() # 消除每一行的\n
data_list = line.split(',')
record = Record(data_list[0], data_list[1], int(data_list[2]), data_list[3])
record_list.append(record)
f.close()
return record_list
# 子类二
class JsonFileReader(FileReader):
def __init__(self, path):
self.path = path # 定义成员变量记录文件的路径
def read_data(self) -> list[Record]:
f = open(self.path, 'r', encoding='utf-8')
record_list: list[Record] = []
for line in f.readlines():
data_dict = json.loads(line)
record = Record(data_dict['date'], data_dict['order_id'], int(data_dict['money']), data_dict['province'])
record_list.append(record)
f.close()
return record_list
3.main.py
from pymysql import Connection
# 构建SQL链接
conn = Connection(
host='localhost', # 本机
port=3306, # 端口
user='root', # 账户
password='2020', # 密码
autocommit=True # 自动提交
)
cursor = conn.cursor() # 创建游标
conn.select_db('test') # 选择数据库
# 查询数据传入results
cursor.execute("select * from orders")
results = cursor.fetchall()
# 将数据写入文件
data_dict = {}
f = open("D:/1研究生学习/Python学习/2月销售数据.txt", "a", encoding="utf-8")
for r in results:
data_dict["date"] = str(r[0])
data_dict["order_id"] = r[1]
data_dict["money"] = r[2]
data_dict["province"] = r[3]
data = json.dumps(data_dict, ensure_ascii=False) # 将字典转化为JSON类型
f.write(data)
f.write("\n")
f.flush() # 刷新文件
f.close() # 关闭文件
conn.close() # 关闭链接
main.py中需要注意的地方:
(1)我创建的数据库名称是“test”,选择数据库时请自行更改。
(2)关于for循环中data_dict["date"] = str(r[0])的解释
先替换运行如下代码:
# 将数据写入文件
data_dict = {}
for r in results:
data_dict["date"] = str(r[0])
data_dict["order_id"] = r[1]
data_dict["money"] = r[2]
data_dict["province"] = r[3]
print(r)
conn.close() # 关闭链接
可以看到输出如下
日期其实是datetime.date格式,因此要转为字符格式,再写入字典
最终结果