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
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...