【python】-python向MySQL写入数据
一、数据内容展示
1月份数据是普通文本,使用逗号分割数据记录,从前到后分别是(日期、订单id、销售额、销售省份)
2月份数据是JSON数据,同样包含(日期、订单id、销售额、销售省份)
二、案例操作
2.1 创建数据库
本次需求开发我们需要新建一个数据库来使用,数据库名称:py_sql
# 创建数据库
create database py_sql charset utf8;
创建结果:
创建表orders用于存放以上文件数据信息:
use py_sql;
# 创建表
create table orders(
order_data data,
order_id varchar(255),
money int,
province varchar(10)
);
2.2 定义封装类
使用之前章节学习过的封装,定义两个封装类,
data_xs.py:Record是定义数据的类
"""
数据定义的类
"""
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}"
file_xs.py:
"""
文件相关的类定义
"""
import json
from data_xs import Record
# 先定义一个抽象类来做顶层设计,确定有哪些功能需要实现
class FileReader:
def read_data(self) -> list[Record]:
"""读取文件的数据,读到的每一条数据都转换为Record对象,将他们都封装到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 = [] # type: 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
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"], int(data_dict["money"]), data_dict["province"])
record_list.append(record)
f.close()
return record_list
if __name__ == "__main__":
text_fine_reader = TextFileReader("D:\pydaima\8day速成python\shuju/2011年1月销售数据.txt")
json_file_reader = JsonFileReader("D:\pydaima\8day速成python\shuju/2011年2月销售数据JSON.txt")
list1 = text_fine_reader.read_data()
list2 = json_file_reader.read_data()
for l in list1:
print(l)
main.py
将数据读取之后插入到数据库的orders表中:
from file_xs import TextFileReader,JsonFileReader,FileReader
from data_xs import Record
from pymysql import Connection
text_file_reader = TextFileReader("D:\pydaima\8day速成python\shuju/2011年1月销售数据.txt")
json_file_reader = JsonFileReader("D:\pydaima\8day速成python\shuju/2011年2月销售数据JSON.txt")
jan_data = text_file_reader.read_data() # 1月份数据
feb_data = json_file_reader.read_data() # 2月份数据
# 将两个月份的数据合并成一个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_data, order_id, money, province) " \
f"values('{record.date}', '{record.order_id}', {record.money}, '{record.province}')"
# 执行sql语句,插入数据
cursor.execute(sql)
conn.close()
结果:
作者:星星法术嗲人