利用Python将文本数据批量存入数据库

一、概述

本次案例使用的两份数据格式分别为csv和json,根据面向对象思想,可分别编写用于读取两类文件的类;并编写一个数据类,用来存储读取到的信息。

最后在程序主文件中,先建立数据库链接,通过链接对象执行SQL语句。新建两个空表用于存储这些数据--->插入数据,最后关闭链接即可。(新建表操作可以在MySQL图形化界面中进行,更加高效快捷,此处是为练习才使用python间接完成)

二、代码

"""
数据封装的类
"""
class Record:
    def __init__(self, date, order_id, money, province):
        self.date = date       #销售日期
        self.order_id = order_id        #销售订单号
        self.money = money       #销售金额
        self.province = province        #销售省份

    def __str__(self):
        return f"{self.date}, {self.order_id}, {self.money}, {self.province}"
"""
文件读取类
"""
import json

from data_define 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: list[Record] = []       #定义空列表,用于存放转换为Record类的数据,每行数据转换为一个Record类
        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类
            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

#测试模块
if __name__ == '__main__':
    text_file_reader = TextFileReader("D:/2011年1月销售数据.txt")
    list1 = text_file_reader.read_data()
    for l in list1:
        print(l)
    json_file_reader = JsonFileReader("D:/2011年2月销售数据JSON.txt")
    list2 = json_file_reader.read_data()
    for l in list2:
        print(l)
"""
练习:利用pymysql库将文本文件数据写入MySQL数据库
"""
from data_define import Record
from file_define import *
from pymysql import Connection
#读取文件

#创建文件对象
text_file_reader = TextFileReader("D:/2011年1月销售数据.txt")
json_file_reader = JsonFileReader("D:/2011年2月销售数据JSON.txt")

#读取数据(返回list[Record])
jan_list = text_file_reader.read_data()   #1月数据
feb_list = json_file_reader.read_data()   #2月数据


#写入数据库

#构建数据库链接
conn = Connection(
    host="localhost",    #主机号(IP)
    port=3306,     #端口
    user="root",
    password="123456",
    autocommit=True     #插入数据自动确认
)

#构建游标对象
cursor = conn.cursor()

#选择数据库
conn.select_db("test")

#利用游标对象创建存储数据的表
cursor.execute("create table January_order_info("
               "order_date date, order_id varchar(255), money int, province varchar(255));")
cursor.execute("create table February_order_info("
               "order_date date, order_id varchar(255), money int, province varchar(255));")

#插入数据
#循环遍历一月数据的列表,取得每个record对象
for record in jan_list:
    cursor.execute(f"insert into January_order_info values("
                   f"'{record.date}', '{record.order_id}', {record.money}, '{record.province}')")

for record in feb_list:
    cursor.execute(f"insert into February_order_info values("
                   f"'{record.date}', '{record.order_id}', {record.money}, '{record.province}')")

#关闭链接
conn.close()

三、结果展示

表格存在test库中

一月销售数据表

二月销售数据表

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值