91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python/MySQL怎么實現Excel文件自動處理數據功能

發布時間:2023-02-22 16:47:09 來源:億速云 閱讀:118 作者:iii 欄目:開發技術

今天小編給大家分享一下Python/MySQL怎么實現Excel文件自動處理數據功能的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    問題描述

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

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

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

    注意:

    • 用戶的信息主要以excel的形式存儲,沒有服務器。

    • 商品表里面存了用戶挑選的商品信息。

    • 訂單表里面存了用戶付款的商品信息。

    解決方案

    一、SQL查詢

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

    (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;

    Python/MySQL怎么實現Excel文件自動處理數據功能

    Python/MySQL怎么實現Excel文件自動處理數據功能

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

    執行下面的查詢語句進行查找:

    -- 搜索未下單的商品信息
    SELECT *,
    if(bb.UPC IS NULL,'未下單', '下單') as 下單情況
    
    FROM shangpin aa
    
    LEFT JOIN dingdan bb
    ON aa.UPC = bb.UPC

    得到以下查詢結果:

    Python/MySQL怎么實現Excel文件自動處理數據功能

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

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

    二、SQL、python處理

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

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

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

    import pymysql  #導入PyMySQL庫 
    import datetime
    import warnings
    import pandas as pd
    import matplotlib.pyplot as plt
    warnings.filterwarnings('ignore')
    
    # 1. 連接數據庫,創建連接對象 db
    # 連接對象作用是:連接數據庫、發送數據庫信息、處理回滾操作(查詢中斷時,數據庫回到最初狀態)、
    # 創建新的光標對象 
    def connect_database(database, password):
         db = pymysql.connect(host ="localhost", #host屬性 
                                  user ="sys", #用戶名  
                                  password = password, #此處填登錄數據庫的密碼 
                                  database = database, #數據庫名 
                                  charset="utf8"  # 如果中文顯示亂碼,則需要添加charset = "utf8"
                             )
         return db
    
    def read_data(db):
         # 2. 使用 cursor() 方法創建一個游標對象 cursor
         cursor = db.cursor()
         # 3. 利用MySQL語句查找數據并轉化為FrameData(包含列名)
         try:
              # 使用 execute() 方法執行 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()
    
              # 下面為將獲取的數據轉化為 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()若對數據庫進行了修改,需進行提交之后再關閉
              """
              # 提交到數據庫執行
              #db.commit()
              #print("OK")
         except:
              # 如果發生錯誤則回滾
              db.rollback()
              print("失敗")
         """
         使用完成之后需關閉游標和數據庫連接,減少資源占用,cursor.close(),db.close()
         db.commit()若對數據庫進行了修改,需進行提交之后再關閉
         """
         # 關閉數據庫連接
         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' #數據庫名稱
           password = 'sys' #數據庫用戶密碼
           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()
         
         ## 測試
         # 執行任務
         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文件即可查看數據。

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

    三、python處理

    python處理。具體實現過程如下:

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

     參考

    import pandas as pd
    def taskTime():
    ## 1. 分別導入2個表的數據
        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. 抽取數據
        product=product.rename(columns={'UPC':'ID'}) # 對商品表里面的UPC重命名未ID(為了保留訂單表里面的CPU著一列)
        PO=pd.merge(product,order,left_on='ID', right_on='UPC',how='left') # 左連接抽取數據
        PO.loc[pd.isnull(PO['UPC']), '下單情況'] = '未下單' # 找到選中但是未下單的數據標注為未下單
        PO['下單情況'] = PO['下單情況'].fillna(value='下單') # 找到下單的數據,在'下單情況'這一列中標注為下單
    
        ## 3. 以excel的形式導出查詢好的數據
        PO = PO.loc[:, ['ID', 'UPC', '下單情況', '產品名稱E', '產品參數C', '價格', '建議零售價','訂單日期', '品牌', 'PO#', 'SKU','配置', '單價', '數量', '銷售金額', '成本單價', '成本', '成本價含稅/未稅']] # 按列名導出需要的數據
        PO.to_excel('d:/python_code/crontab/data/data_python.xlsx', sheet_name='未下單情況')  # 導出excel表
        return PO
    
    if __name__ == "__main__":
      taskTime()
        print('執行成功')

    (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('執行時間 :', ts)   # 輸出時間
         taskTime()  # 執行代碼
       
       scheduler = BlockingScheduler() ## 定時 
       # 在每天17和23點的25分,運行一次 job 方法
     scheduler.add_job(job, 'cron', hour='17-23', minute='22')
       scheduler.start()

    打開data_python的excel文件即可查看數據。

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

    四、優化python處理

    1.手動執行代碼

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

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

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

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

    見下圖

    Python/MySQL怎么實現Excel文件自動處理數據功能

    注意:數據還有代碼的路徑要寫對

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

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

     python 路徑\文件名.py

    Python/MySQL怎么實現Excel文件自動處理數據功能

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

    2.開機自動執行代碼

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

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

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

    對比四種方案

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

    以上就是“Python/MySQL怎么實現Excel文件自動處理數據功能”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    盐边县| 尼玛县| 萍乡市| 宜宾市| 齐齐哈尔市| 丹江口市| 樟树市| 施甸县| 酉阳| 定安县| 岗巴县| 河源市| 汝阳县| 卢龙县| 南乐县| 黄大仙区| 琼中| 奇台县| 龙南县| 温宿县| 扶余县| 疏附县| 绥棱县| 大理市| 湖口县| 咸丰县| 盐源县| 灵璧县| 武宣县| 金阳县| 林周县| 宝鸡市| 红原县| 兴义市| 德保县| 三亚市| 从江县| 昌乐县| 辽源市| 新绛县| 皋兰县|