Django-Excel導入導出

来源:https://www.cnblogs.com/missdx/archive/2020/07/28/13393373.html
-Advertisement-
Play Games

利用pandas模塊實現Excel與MySQL的互通 代碼實現 Excel數據導入MySQL(方式一) # 批量導入數據(速度快) def importdata(localpath: str, db: str, foreignkey): data = pandas.read_excel(localp ...


  • 利用pandas模塊實現Excel與MySQL的互通
  • 代碼實現
    • Excel數據導入MySQL(方式一)
# 批量導入數據(速度快)
def importdata(localpath: str, db: str, foreignkey):
    data = pandas.read_excel(localpath, dtype='str', keep_default_na=False)  # 讀取本地上傳的excel表內容, dtype='str'防止讀取001為1這種情況,keep_default_na=False是防止空值為NULL。
    verbosename = db._meta.fields  # 獲取被導入資料庫的欄位
    rows = data.shape[0]  # 獲取excel表的行數
    columns = data.shape[1]  # 獲取excel表的列數
    querysetlist = []  # 用於儲存數據
    eachdata = {}  # 用於儲存每一行數據
    # 外鍵需要添加_id,與資料庫中的欄位保持一致
    for i in range(len(verbosename)):
        if verbosename[i].name in foreignkey:  # 判斷是否為外鍵
            verbosename[i].name = verbosename[i].name + '_id'
    if len(verbosename) == columns:  # 必須保證二者長度一致,順序一致。
        for i in range(rows):
            for j in range(len(verbosename)):
                eachdata[verbosename[j].name] = data.iloc[i, j]  # 不會包括表頭
            querysetlist.append(db(**eachdata))
        try:
            db.objects.bulk_create(querysetlist)  # 批量導入數據
            msg = '數據導入成功,導入數據共計{}條'.format(rows)
        except Exception as e:
            print('報錯信息:{}'.format(e))
            msg = '數據導入失敗'
        return msg
    else:
        msg = '數據導入失敗!請檢查excel表。'
        return msg
    • Excel數據導入MySQL(方式二)
# 逐個導入數據(速度慢)
def importdata2(localpath: str, db: str, foreignkey):
    data = pandas.read_excel(localpath, dtype='str', keep_default_na=False)  # 讀取本地上傳的excel表內容, dtype='str'防止讀取001為1這種情況。
    verbosename = db._meta.fields  # 獲取被導入資料庫的欄位
    # for i in range(0, len(verbosename)):
    #     print(verbosename[i].name)
    rows = data.shape[0]  # 獲取excel表的行數
    columns = data.shape[1]  # 獲取excel表的列數
    eachdata = {}  # 用於儲存每一行數據
    # 外鍵需要添加_id,與資料庫中的欄位保持一致
    for i in range(len(verbosename)):
        if verbosename[i].name in foreignkey:  # 判斷是否為外鍵
            verbosename[i].name = verbosename[i].name + '_id'
    if len(verbosename) == columns:  # 必須保證二者長度一致,順序一致。
        for i in range(rows):
            for j in range(len(verbosename)):
                eachdata[verbosename[j].name] = data.iloc[i, j]  # 不會包括表頭
            try:
                db.objects.create(**eachdata)
                msg = '數據導入成功,共計{}條'.format(rows)
            except Exception as e:
                print('報錯信息:{}'.format(e))
                msg = '數據導入失敗'
            # return msg
    else:
        msg = '數據導入失敗!請檢查excel表。'
    return msg
    • 調用部分
def import_ceping(request):
    """導入測評人員"""
    foreignkey = ['department', 'rank_id', 'post_id']  # 記錄外鍵
    # 接收excel文件存儲到Media文件夾
    rev_file = request.FILES.get('excel')
    # 判斷是否有文件
    if not rev_file:
        return JsonResponse({'code': 0, 'msg': 'Excel文件不存在'})
    # 獲得一個唯一的名字:uuid+hash
    new_name = get_random_str()
    # 準備寫入的URL
    file_path = os.path.join(settings.MEDIA_ROOT, new_name + os.path.splitext(rev_file.name)[1])
    # 開始寫入磁碟
    try:
        f = open(file_path, 'wb')
        # 分多次寫入
        for i in rev_file.chunks():
            f.write(i)
        f.close()
    except Exception as e:
        return JsonResponse({'code': 0, 'msg': '寫入失敗,請聯繫管理員'})
    # 讀取存儲在Media文件夾的數據
    ex_data = importdata(file_path, Ceping, foreignkey)
    return JsonResponse({'code': 1, 'msg': ex_data})
    • MySQL數據導出Excel
#  導出數據
def exportdata(localpath, db):
    verbosename = db._meta.fields
    columnname = []  # 存儲欄位名
    for i in range(len(verbosename)):
        columnname.append(verbosename[i].name)
    info = db.objects.values_list()  # 查詢資料庫數據
    data = pandas.DataFrame(info)
    try:
        data.to_excel(localpath, na_rep='NULL', header=columnname, index=False)
        msg = '數據導出成功'
    except Exception as e:
        msg = '數據導出失敗'
    return msg

 

        


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • #include <iostream> using namespace std; template<typename T> class Complex { public : Complex() { } Complex(T a, T b) { this->a = a; this->b = b; } v ...
  • 今天使用mybatis開發公司中台項目踩的一個坑,分享並記錄一下 踩坑前因:因項目中比較多狀態欄位,用了大量的Integer 0和1進行判斷 在功能做完後只是粗略的點了下覺得沒多大問題(來自程式員強大的自信),便提交了代碼,很不巧的是剛好領導在做功能測試,發現了功能缺陷,主角來了: 在做牧戶查詢時所 ...
  • 假如,明天你財務自由了,你會想去做些什麼? 最近,他二哥坐電梯發現身邊的程式員們,除了交流各種棘手的Bug之外,還會討論股市大盤漲了還是跌了,自己買的股票賺了還是虧了。生活不易,猿猿嘆氣,誰又沒有做過一夜暴富的美夢呢? 待到春來時,洗手作羹湯。 拋棄java C,只把歌來唱。 這樣美麗如畫的場景在他 ...
  • 學習ruby中記錄下的一些要點和感悟,隨緣更新 內容來自 《“笨方法”學ruby》、https://www.runoob.com/ ,此處僅做記錄 #Ruby 數組(Array) Ruby 數組是任何對象的有序整數索引集合。數組中的每個元素都與一個索引相關,並可通過索引進行獲取。 數組的索引從 0 ...
  • 內容簡介: 《Python自動化運維:技術與最佳實踐》一書在中國運維領域將有“劃時代”的重要意義:一方面,這是國內第一本從縱、深和實踐角度探討Python在運維領域應用的著作;一方面本書的作者是中國運維領域的“偶像級”人物,本書是他在天涯社區和騰訊近10年工作經驗的結晶。因為作者實戰經驗豐富,所以能 ...
  • Python是一種解釋型、面向對象、動態數據類型的程式設計語言,在游戲開發領域,Python也得到越來越廣泛的應用,並由此受到重視。 本書教授用Python開發精彩游戲所需的[]為重要的該你那。本書不只是介紹游戲編程概念的相關內容,還深入到複雜的主題。全書共14章,依次介紹了使用Pygame、文件I ...
  • 百度雲盤:Python 編程金典PDF高清完整版免費下載 提取碼:klcf 內容簡介 本書由全球著名的程式語言培訓專家精心編著,解釋瞭如何將Python用作常規用途,編寫多層、客戶機/伺服器結構、資料庫密集型、基於Internet和Web的應用程式。書中採用作者獨創的“活代碼”教學方式,層層揭示了P ...
  • 書籍作者:Mark Summerfield(馬克 . 薩默菲爾德)(英) 書籍譯者:閆鋒欣內容簡介:本書是一本闡述Qt高級編程技術的書籍。本書以工程實踐為主旨,是對Qt現有的700多個類和上百萬字參考文檔中部分關鍵技術深入、全面的講解和探討,如豐富的網路/桌面應用程式、多線程、富文本處理、圖形/視圖 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...