案例需求:
使用《面向对象》章节案例中的数据集,完成使用 Python 语言,读取数据,并将数据写入 MySQL 的功能。
main.py
"""
SQL综合案例,读取文件,写入SQL数据库中
"""
from file_define import FileReader,TextFileReader,JsonFileReader
from data_define import Record
from pyecharts.options import *
from pyecharts.globals import ThemeType
from pymysql import Connection
text_file_reader=TextFileReader("D:/2011年1月销售数据.txt")
josn_file_reader=JsonFileReader("D:/2011年2月销售数据JSON.txt")
jan_data=text_file_reader.read_data()
feb_data=josn_file_reader.read_data()
#将2个月份的数据合并为1个list存储
all_data=jan_data+feb_data
#构建MYSQL链接对象
conn=Connection(
host="localhost",
port=3306,
user="root",
password="123456",
autocommit=True
)
#获得游标对象
cursor=conn.cursor()
#选择数据库
conn.select_db("py_sql")
#组织SQL语句
for record in all_data:
sql=f"insert into orders(order_date,order_id,money,province) " \
f"value('{record.data}','{record.order_id}',{record.money},'{record.province}')"
#print(sql)
# 执行SQL语句
cursor.execute(sql)
#关闭MYSQL链接对象
conn.close()
file_define.py
"""
文件相关的类定义
"""
import json
from data_define import Record
class FileReader:
def read_data(self)->list[Record]:
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=[]
for line in f.readlines():
line=line.strip() #消除读取到的换行符
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 = []
for line in f.readlines():
data_dict=json.loads(line)
record=Record(data_dict["date"],data_dict["order_id"],data_dict["money"],data_dict["province"])
record_list.append(record)
f.close()
return record_list
if __name__=='__main__':
text_file_reader=TextFileReader("D:/2011年1月销售数据.txt")
list1=text_file_reader.read_data()
json_file_reader=JsonFileReader("D:/2011年2月销售数据JSON.txt")
list2=json_file_reader.read_data()
for l in list1:
print(l)
for l in list2:
print(l)
data_define,py
"""
数据定义的类
"""
class Record:
def __init__(self,data,order_id,money,province):
self.data = data
self.order_id = order_id
self.money = money
self.province = province
def __str__(self):
return f"{self.data},{self.order_id},{self.money},{self.province}"
运行结果: