【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()

结果:

 

作者:星星法术嗲人

物联沃分享整理
物联沃-IOTWORD物联网 » 【python】-python向MySQL写入数据

发表回复