最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python/MySQL實現(xiàn)Excel文件自動處理數(shù)據(jù)功能

 更新時間:2023年02月21日 14:15:06   作者:酸菜魚土豆大俠  
在沒有服務器存儲數(shù)據(jù),只有excel文件的情況下,如何利用SQL和python實現(xiàn)數(shù)據(jù)分析和數(shù)據(jù)自動處理的功能?本文就來和大家聊聊解決辦法

問題描述

在沒有服務器存儲數(shù)據(jù),只有excel文件的情況下,如何利用SQL和python實現(xiàn)數(shù)據(jù)分析和數(shù)據(jù)自動處理的功能?

例如:消費者購買商品時,會挑選商品然后再對商品付款?,F(xiàn)在需要查找出用戶挑中但是沒有付款的商品并標識為未下單,付款的商品標注為下單。并且每隔一段時間自動執(zhí)行上述操作。

目的:定時抽取上面的數(shù)據(jù)分析用戶購買商品的行為。對比付款和選中未下單的商品的性能、價格等信息來發(fā)掘用戶喜好,從而提高選品下單率。

注意:

  • 用戶的信息主要以excel的形式存儲,沒有服務器。
  • 商品表里面存了用戶挑選的商品信息。
  • 訂單表里面存了用戶付款的商品信息。

解決方案

一、SQL查詢

首先想到的是利用SQL語言實現(xiàn)這樣的查詢。具體實現(xiàn)過程如下:

(1) 建立dingdan表和shangpin表:

-- ----------------------------
-- Table structure for dingdan
-- ----------------------------
DROP TABLE IF EXISTS `dingdan`;
CREATE TABLE `dingdan`  (
  `d_id` int(11) NOT NULL,
  `UPC` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`d_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of dingdan
-- ----------------------------
INSERT INTO `dingdan` VALUES (1, '6972470560664');
INSERT INTO `dingdan` VALUES (2, '6972470560664');
INSERT INTO `dingdan` VALUES (3, '6972470561227');
INSERT INTO `dingdan` VALUES (4, '6972470561890');
INSERT INTO `dingdan` VALUES (5, '6972470561906');

SET FOREIGN_KEY_CHECKS = 1;


-- ----------------------------
-- Table structure for shangpin
-- ----------------------------
DROP TABLE IF EXISTS `shangpin`;
CREATE TABLE `shangpin`  (
  `UPC` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `商品` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`UPC`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of shangpin
-- ----------------------------
INSERT INTO `shangpin` VALUES ('6972470560657', 'A');
INSERT INTO `shangpin` VALUES ('6972470560664', 'A');
INSERT INTO `shangpin` VALUES ('6972470561210', 'D');
INSERT INTO `shangpin` VALUES ('6972470561227', 'B');
INSERT INTO `shangpin` VALUES ('6972470561890', 'C');
INSERT INTO `shangpin` VALUES ('6972470651791', 'B');

SET FOREIGN_KEY_CHECKS = 1;

(2) 將excel數(shù)據(jù)導入SQL軟件中。

執(zhí)行下面的查詢語句進行查找:

-- 搜索未下單的商品信息
SELECT *,
if(bb.UPC IS NULL,'未下單', '下單') as 下單情況

FROM shangpin aa

LEFT JOIN dingdan bb
ON aa.UPC = bb.UPC

得到以下查詢結果:

(3) 將搜索結果導出為excel。

(4) 隔一段時間,需要人工重復上面的操作。

二、SQL、python處理

利用SQL查詢、python做定時處理。具體實現(xiàn)過程如下:

(1) 重復方案1中的步驟1和2,將數(shù)據(jù)導入到數(shù)據(jù)庫中。

(2) 用python連接數(shù)據(jù)庫并查找數(shù)據(jù)。

import pymysql  #導入PyMySQL庫 
import datetime
import warnings
import pandas as pd
import matplotlib.pyplot as plt
warnings.filterwarnings('ignore')

# 1. 連接數(shù)據(jù)庫,創(chuàng)建連接對象 db
# 連接對象作用是:連接數(shù)據(jù)庫、發(fā)送數(shù)據(jù)庫信息、處理回滾操作(查詢中斷時,數(shù)據(jù)庫回到最初狀態(tài))、
# 創(chuàng)建新的光標對象 
def connect_database(database, password):
     db = pymysql.connect(host ="localhost", #host屬性 
                              user ="sys", #用戶名  
                              password = password, #此處填登錄數(shù)據(jù)庫的密碼 
                              database = database, #數(shù)據(jù)庫名 
                              charset="utf8"  # 如果中文顯示亂碼,則需要添加charset = "utf8"
                         )
     return db

def read_data(db):
     # 2. 使用 cursor() 方法創(chuàng)建一個游標對象 cursor
     cursor = db.cursor()
     # 3. 利用MySQL語句查找數(shù)據(jù)并轉化為FrameData(包含列名)
     try:
          # 使用 execute() 方法執(zhí)行 SQL 查詢
          mysql = "SELECT *, if(bb.UPC IS NULL,'未下單', '下單') as 下單情況 FROM shangpin aa LEFT JOIN dingdan bb ON aa.UPC = bb.UPC" # SQL語句
          cursor.execute(mysql)
          data = cursor.fetchall()

          # 下面為將獲取的數(shù)據(jù)轉化為 dataframe 格式
          columnDes = cursor.description #獲取連接對象的描述信息
          #print("cursor.description中的內容:",columnDes)
          columnNames = [columnDes[i][0] for i in range(len(columnDes))] #獲取列名
          df = pd.DataFrame([list(i) for i in data],columns=columnNames) #得到的data為二維元組,逐行取出,轉化為列表,再轉化為df
          print(df)

          """
          db.commit()若對數(shù)據(jù)庫進行了修改,需進行提交之后再關閉
          """
          # 提交到數(shù)據(jù)庫執(zhí)行
          #db.commit()
          #print("OK")
     except:
          # 如果發(fā)生錯誤則回滾
          db.rollback()
          print("失敗")
     """
     使用完成之后需關閉游標和數(shù)據(jù)庫連接,減少資源占用,cursor.close(),db.close()
     db.commit()若對數(shù)據(jù)庫進行了修改,需進行提交之后再關閉
     """
     # 關閉數(shù)據(jù)庫連接
     cursor.close()
     db.close()
     return df    

(3) 做定時任務

參考

     ## 定時任務
     import time
     from apscheduler.schedulers.blocking import BlockingScheduler
     
     def job():
       dt = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
       print('{} --- {}'.format(text, t))
       database = 'sys' #數(shù)據(jù)庫名稱
       password = 'sys' #數(shù)據(jù)庫用戶密碼
       db = connect_database(database, password)
       data_sp = read_data(db)
       data_sp.to_excel('../data/data_ans.xlsx', sheet_name='未下單情況')
       
     scheduler = BlockingScheduler()
     # 在每天22和23點的25分,運行一次 job 方法
     scheduler.add_job(job, 'cron', hour='22-23', minute='25')
     scheduler.start()
     
     ## 測試
     # 執(zhí)行任務
     def time_printer():
         # 輸出時間
         now = datetime.datetime.now()
         ts = now.strftime('%Y-%m-%d %H:%M:%S')
         print('do func time :', ts)
     # 定時任務
     def loop_monitor():
         while True:
             time.sleep(20)  # 暫停20秒
             
     if __name__ == "__main__":
         loop_monitor()

打開data_ans的excel文件即可查看數(shù)據(jù)。

程序需要一直運行,如果因為關機導致程序終止,需要重新運行。

三、python處理

python處理。具體實現(xiàn)過程如下:

(1) 導入excel數(shù)據(jù)并利用python完成數(shù)據(jù)查詢,以excel的形式導出查詢好的數(shù)據(jù)。

參考

import pandas as pd
def taskTime():
## 1. 分別導入2個表的數(shù)據(jù)
    product = pd.read_excel('d:/python_code/crontab/data/taskdata.xlsx', sheet_name='商品') # 換成自己的路徑和sheet名稱
    order = pd.read_excel('d:/python_code/crontab/data/taskdata.xlsx', sheet_name='訂單') 

    ## 2. 抽取數(shù)據(jù)
    product=product.rename(columns={'UPC':'ID'}) # 對商品表里面的UPC重命名未ID(為了保留訂單表里面的CPU著一列)
    PO=pd.merge(product,order,left_on='ID', right_on='UPC',how='left') # 左連接抽取數(shù)據(jù)
    PO.loc[pd.isnull(PO['UPC']), '下單情況'] = '未下單' # 找到選中但是未下單的數(shù)據(jù)標注為未下單
    PO['下單情況'] = PO['下單情況'].fillna(value='下單') # 找到下單的數(shù)據(jù),在'下單情況'這一列中標注為下單

    ## 3. 以excel的形式導出查詢好的數(shù)據(jù)
    PO = PO.loc[:, ['ID', 'UPC', '下單情況', '產品名稱E', '產品參數(shù)C', '價格', '建議零售價','訂單日期', '品牌', 'PO#', 'SKU','配置', '單價', '數(shù)量', '銷售金額', '成本單價', '成本', '成本價含稅/未稅']] # 按列名導出需要的數(shù)據(jù)
    PO.to_excel('d:/python_code/crontab/data/data_python.xlsx', sheet_name='未下單情況')  # 導出excel表
    return PO

if __name__ == "__main__":
  taskTime()
    print('執(zhí)行成功')

(2) 定時處理

   ## 2. 定時處理
   import datetime
   from apscheduler.schedulers.blocking import BlockingScheduler
   
   def job():
     now = datetime.datetime.now()
     ts = now.strftime('%Y-%m-%d %H:%M:%S')
     print('執(zhí)行時間 :', ts)   # 輸出時間
     taskTime()  # 執(zhí)行代碼
   
   scheduler = BlockingScheduler() ## 定時 
   # 在每天17和23點的25分,運行一次 job 方法
 scheduler.add_job(job, 'cron', hour='17-23', minute='22')
   scheduler.start()

打開data_python的excel文件即可查看數(shù)據(jù)。

程序需要一直運行,如果因為關機導致程序終止,需要重新運行。

四、優(yōu)化python處理

1.手動執(zhí)行代碼

如果電腦需要關機,這時候代碼不能一直運行,只能在需要數(shù)據(jù)的時候執(zhí)行一下代碼。有以下2個執(zhí)行方法:

(1)用命令行執(zhí)行代碼,具體操作如下:

win + R 輸入cmd 再輸入 路徑以及文件名

python d:\python_code\crontab\code\test.py

見下圖

注意:數(shù)據(jù)還有代碼的路徑要寫對

如果不想用命令行。直接用.bat文件執(zhí)行也可以。

首先,需要新建一個.bat文件(用來運行腳本),在這個文件里面寫上如下代碼后保存:

 python 路徑\文件名.py

將這個文件放到桌面,使用時點擊即可。

2.開機自動執(zhí)行代碼

參考

將已經保存的.bat文件復制到該目錄(C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup)下,可能殺毒軟件會阻止,選擇允許,然后重啟電腦即可。

注:開機自啟以后會打開一個cmd窗口,關閉窗口,python程序將停止運行。

注意:開啟自啟動可能會讓電腦變慢、發(fā)熱。。。

對比四種方案

方案名稱優(yōu)點缺點
SQL查詢代碼簡單,實現(xiàn)簡單數(shù)據(jù)一旦更新需要執(zhí)行導入導出excel的操作。并且需要手動操作,不能自動提醒。
SQL、python處理避免導出excel;可以自動提醒還是需要導入excel;同時操作SQL和python;自動提醒需要程序一直運行
python處理避免導入導出;可以自動提醒,只操作python查詢時的處理不好做(對新手來說);自動提醒需要程序一直運行
優(yōu)化python處理避免導入導出;自動提醒不需要程序一直運行,開機自啟動需要配置一下

總結

在沒有服務器,以excel存儲數(shù)據(jù)的情況下,同樣可以利用SQL和python來做數(shù)據(jù)處理和分析,在遇到excel處理數(shù)據(jù)特別麻煩的時候可以選擇上面的方案做處理,即可以鍛煉自己的SQL和python編程的能力,又可以高效地解決問題。

到此這篇關于Python/MySQL實現(xiàn)Excel文件自動處理數(shù)據(jù)功能的文章就介紹到這了,更多相關Python Excel自動處理數(shù)據(jù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python代碼中如何讀取鍵盤錄入的值

    Python代碼中如何讀取鍵盤錄入的值

    在本篇文章里小編給大家分享的是關于Python代碼中讀取鍵盤錄入值的方法,需要的朋友們可以參考下。
    2020-05-05
  • django 解決manage.py migrate無效的問題

    django 解決manage.py migrate無效的問題

    今天小編就為大家分享一篇django 解決manage.py migrate無效的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • python Yaml、Json、Dict之間的轉化

    python Yaml、Json、Dict之間的轉化

    這篇文章主要介紹了python Yaml 、Json 、Dict 之間的轉化的示例,幫助大家更好的理解和學習python,感興趣的朋友可以了解下
    2020-10-10
  • python實現(xiàn)多線程及線程間通信的簡單方法

    python實現(xiàn)多線程及線程間通信的簡單方法

    這篇文章主要為大家介紹了python實現(xiàn)多線程及線程間通信的簡單方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Python streamlit構建令人驚嘆的可視化Web高級主題界面

    Python streamlit構建令人驚嘆的可視化Web高級主題界面

    本文將深入探討Streamlit的方方面面,從基礎使用到高級主題,從數(shù)據(jù)可視化到部署與分享,更涵蓋了性能優(yōu)化、安全性考慮等最佳實踐,通過豐富的示例代碼和詳細解釋,將能夠全面了解Streamlit的強大功能,并在構建數(shù)據(jù)驅動應用時游刃有余
    2024-01-01
  • 基于python實現(xiàn)圖書管理系統(tǒng)

    基于python實現(xiàn)圖書管理系統(tǒng)

    這篇文章主要為大家詳細介紹了基于python實現(xiàn)圖書管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • 基于python編寫的五個拿來就能用的炫酷表白代碼分享

    基于python編寫的五個拿來就能用的炫酷表白代碼分享

    七夕快到了,所以本文小編將給給大家介紹五種拿來就能用的炫酷表白代碼,無限彈窗表白,愛心發(fā)射,心動表白,玫瑰花等表白代碼,需要的小伙伴快來試試吧
    2023-08-08
  • python實現(xiàn)一個通用的插件類

    python實現(xiàn)一個通用的插件類

    插件管理器用于注冊、銷毀、執(zhí)行插件,本文主要介紹了python實現(xiàn)一個通用的插件類,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2024-04-04
  • Django項目創(chuàng)建及管理實現(xiàn)流程詳解

    Django項目創(chuàng)建及管理實現(xiàn)流程詳解

    這篇文章主要介紹了Django項目創(chuàng)建及管理實現(xiàn)流程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • 使用pyscript在網(wǎng)頁中撰寫Python程式的方法

    使用pyscript在網(wǎng)頁中撰寫Python程式的方法

    本文主要介紹了使用pyscript在網(wǎng)頁中撰寫Python程式的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05

最新評論

木兰县| 丁青县| 平昌县| 诸暨市| 利津县| 盈江县| 隆子县| 宾川县| 奉节县| 和静县| 仁怀市| 罗山县| 依兰县| 吴堡县| 金溪县| 盘山县| 都匀市| 鸡东县| 元阳县| 桐乡市| 蓝田县| 旌德县| 永吉县| 安多县| 临朐县| 祥云县| 浙江省| 双桥区| 文安县| 盱眙县| 吴川市| 德格县| 景宁| 武平县| 高州市| 宁夏| 蓬莱市| 柳州市| 双流县| 垫江县| 邛崃市|