【Python】使用MySQL綜合案例

數據說明:

一月份各省銷售數據:csv格式

二月份各省銷售數據:json格式

實現要求:將兩個文件中的數據存儲到數據庫中,并反向從數據庫中讀取數據存儲為json格式文件

本文提供數據

完成案例所需基礎

【Python】基礎知識(函數與數據容器)

【Python】JSON與jsonpath

【Python】文件操作

【Python】模塊和包

【Python】面向對象

【MySQL】基礎操作(DDL,DML,DCL,DQL)

【Python】操作MySQL基礎使用

案例實現

先在數據庫中創建表,依次輸入執行以下sql語句

create database py_sql charset utf8;
use py_sql;
create table orders(order_date date,order_id varchar(255),money int,province varchar(10)
);

Data_define.py

# 數據定義的類class Record:def __init__(self, date, order_id, money, province):self.date = date                # 訂單日期self.order_id = order_id        # 訂單idself.money = money              # 訂單金額self.province = province        # 銷售省份def __str__(self):return f"{self.date},{self.order_id},{self.money},{self.province}"

File_define.py

# 和文件相關的類定義
import jsonfrom Data_define import Record
# 先定義一個抽象類用來做頂層設計,確定有哪些功能需要實現
class FileReader:def read_data(self) -> list[Record]:# 讀取文件的數據,讀到的每一條數據都轉換為Record對象,將它們都封裝到list內返回即可passclass 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() # 消除讀取到的每一行數據中的\ndata_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_listclass JsonFileReader(FileReader):def __init__(self,path):self.path = pathdef 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"], data_dict["money"], data_dict["province"])record_list.append(record)f.close()return record_listif __name__ == '__main__':text_file_reader = TextFileReader("2011年1月銷售數據.txt")json_file_reader = JsonFileReader("2011年2月銷售數據JSON.txt")list1 = text_file_reader.read_data()list2 = json_file_reader.read_data()for l in list1:print(l)for l in list2:print(l)

main.py

# 讀取文件,寫入MySQL數據庫中
from File_define import TextFileReader,JsonFileReader
from Data_define import Record
from pymysql import Connectiontext_file_reader = TextFileReader("2011年1月銷售數據.txt")
json_file_reader = JsonFileReader("2011年2月銷售數據JSON.txt")jan_data: list[Record] = text_file_reader.read_data() # 1月份數據
feb_data: list[Record] = json_file_reader.read_data() # 2月份數據
# 將2個月份的數據合并為1個list來存儲
all_data: list[Record] = jan_data + feb_dataconn = 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"values('{record.date}','{record.order_id}',{record.money},'{record.province}')"cursor.execute(sql)conn.close()

toJson.py

# 將寫入到數據庫的數據讀取出來存儲為json格式
from pymysql import Connection
import json
conn = Connection(host = 'localhost',port = 3306,user = 'root',password = '123456',autocommit = True
)
cursor = conn.cursor()
conn.select_db('py_sql')
cursor.execute("select * from orders")
results: tuple = cursor.fetchall()
f = open('2011年1,2月銷售數據.txt','w',encoding='UTF-8')
for r in results:dict = {"date":f"{r[0]}","order_id":r[1],"money":r[2],"province":r[3]}#print(dict)data = json.dumps(dict, ensure_ascii=False)#print(data)f.write(data)f.write("\n")
f.close()
conn.close()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12886.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12886.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12886.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++ 日志庫 log4cpp 編譯、壓測及其范例代碼 [全流程手工實踐]

文章目錄 一、 log4cpp官網二、下載三、編譯1.目錄結構如下2.configure 編譯3.cmake 編譯 四、測試五、壓測源碼及結果1.運行環境信息2.壓測源碼3.壓測結果 文章內容:包含了對其linux上的完整使用流程,下載、編譯、安裝、測試用例嘗試、以及一份自己寫好…

Qt | QTimer 類(計時器)

01、相關知識回顧 Qt C++ | QTimer經驗總結Qt | QDateTimeEdit、QDateEdit類和QTimeEdit類02、QTimer 類 1、QTimer 類是 QObejct 的直接子類,該類用于實現計時器,QTimer 類未繼承自 QW

IT革新狂潮:引領未來的技術趨勢

方向一:技術革新與行業應用 當前現狀: 量子計算:量子計算的研究正在加速,盡管目前仍處于初級階段,但其在藥物研發、加密技術和材料科學等領域的應用潛力已被廣泛認可。 虛擬現實(VR)與增強現實…

湖南大學OS-2018期末考試(不含解析)

前言 不知道哪里翻出來的一張,看著確實像期末考卷,暫且放一下。或許做過,或許沒做過。 總之答案不記得了。做完可以評論區發一下或者找我發出來。 共6道大題。 一、(30%) 1. (6%) 進程間通信的兩種方法分別是什么&…

完成所有任務的最少時間 - (LeetCode)

前言 今天也是很無精打采的一天,早上看到這道題,都有點懵逼,開始也不懂如何入手,既然自己搞不定,就順便測試了一下AI吧,測試了通義千問和文心一言,把題目拿去那里問,可以把解題思路…

DRF 跨域問題

【一】說明 CORS(跨來源資源共享,Cross-Origin Resource Sharing)是一種瀏覽器技術的規范,旨在解決瀏覽器同源策略(Same-Origin Policy)的限制,使得Web服務可以從不同的網域(源&…

error Error: certificate has expired

用yarn命令安裝依賴的時候遇到報錯: 原因:可能是開了服務器代理訪問導致ssl安全證書失效 解決方法: 在終端輸入 yarn config set "strict-ssl" false -g yarn config set "strict-ssl" false -g 然后再安裝依賴就不…

RS2227XN功能和參數介紹及PDF資料

RS2227XN是一款模擬開關/多路復用器 品牌: RUNIC(潤石) 封裝: MSOP-10 描述: USB2.0高速模擬開關 開關電路: 雙刀雙擲(DPDT) 通道數: 2 工作電壓: 1.8V~5.5V 導通電阻(RonVCC): 10Ω 功能:模擬開關/多路復用器 USB2.0高速模擬開關 工作電壓范圍:1.8V ~ 5…

Linux運行級別介紹

unlevel 運行級別 cat /etc/inittab 0 - halt (Do NOT set initdefault to this) --關機 1 - Single user mode --單用戶(進入單用戶不需要帳號與密碼) 2 - Multiuser, without NFS (The same as 3, if you do not have networking) 多用戶(沒有網絡) 3…

Java基礎篇常見面試問題總結

文章目錄 1. 你是怎樣理解 OOP面向對象?2. 重載與重寫區別3. 接口與抽象類的區別4. 深拷貝與淺拷貝的理解5. 什么是自動拆裝箱? int和 Integer有什么區別6. 和 equals()區別7. String類 能被繼承嗎為什么用 final修飾8. final、finally、finalize區別 1. 你是怎樣理…

【C語言】6.C語言VS實用調試技巧(1)

文章目錄 1.什么是 bug2.什么是調試(debug)?3.Debug 和 Release4.VS調試快捷鍵4.1 環境準備4.2 調試快捷鍵 5.監視和內存觀察5.1 監視5.2 內存 1.什么是 bug bug現在一般是指在電腦系統或程序中,隱藏著的一些未被發現的缺陷或問題…

Git使用(3):版本管理

一、查看歷史 編寫一個java類進行測試 選擇Git -> Show Git Log查看日志。 第一次修改推送到遠程倉庫了,所以有origin(遠程倉庫地址),第二次修改只提交到本地倉庫所以沒有。 二、版本回退 1、本地回退 在要回退的版本上右鍵&a…

XLSX文件刪除了怎么找回?8個恢復方法,太實用了!

U盤作為一種便攜的存儲設備,隨之而來的數據丟失問題也讓人頭疼。尤其是當U盤中的XLSX文件(Excel 2007及以后版本的默認文件格式)被誤刪除或丟失時,如何高效找回這些數據成為了許多人關注的焦點。 本文將從XLSX文件的特性、U盤格式…

C++set關聯式容器

Cset 1. 關聯式容器 vector、list、deque、forward_list(C11)等STL容器,其底層為線性序列的數據結構,里面存儲的是元素本身,這樣的容器被統稱為序列式容器。而map、set是一種關聯式容器,關聯式容器也是用來存儲數據的&#xff0…

深度盤點在當今經濟形勢下資深項目經理或PMO的或去或從

在當今經濟形勢下,資深項目經理(Project Manager)或項目管理辦公室(PMO)的去向和選擇受到多種因素的影響。以下是對他們可能面臨的或去或從的深度盤點: 1、發展去向 1. 深化專業領域:在經濟形勢…

Linux程序開發(一):Linux基礎入門安裝和實操手冊

Tips:"分享是快樂的源泉💧,在我的博客里,不僅有知識的海洋🌊,還有滿滿的正能量加持💪,快來和我一起分享這份快樂吧😊! 喜歡我的博客的話,記得…

CSAP_MAT_BOM_MAINTAIN 返回消息處理

CSAP_MAT_BOM_MAINTAIN是創建修改BOM的函數,但這個函數的返回參數中沒有消息返回。 需要在調用前使用函數: CALL FUNCTION CALO_INIT_APIEXPORTINGdata_reset_sign EXCEPTIONSlog_object_not_found 1log_sub_object_not_found 2other_e…

QT筆記 - QPainter 填充環形區域(甜甜圈)

以矩形為例: QPainter painter(this);// painter.setPen(Qt::blue);// painter.setFont(QFont("Arial",30));// painter.drawText(rect(),Qt::AlignCenter,"Hello Qt!!!");QRect rect QRect(50, 50, 400, 400);QRect box QRect(100, 100, 105…

TS-抽象類和靜態成員

目錄 1,抽象類1,為什么需要抽象類2,抽象成員3,設計模式-模板模式 2,靜態成員1,什么是靜態成員2,設計模式-單例模式 1,抽象類 1,為什么需要抽象類 有時,某個…

Java面試八股之Java中有哪些原子類,原理是什么

Java中有哪些原子類,原理是什么 AtomicInteger 和 AtomicLong: 用于對整數(int)和長整數(long)進行原子操作。 原理:它們內部封裝了一個整型或長整型變量,并通過使用Unsafe類提供…