Django ORM 中的批量操作

来源:http://www.cnblogs.com/alphajx/archive/2016/01/03/5097114.html
-Advertisement-
Play Games

Django ORM 中的批量操作 在Hibenate中,通過批量提交SQL操作,部分地實現了資料庫的批量操作。但在Django的ORM中的批量操作卻要完美得多,真是一個驚喜。 數據模型定義 首先,定義一個實例使用的django資料庫模型Product,只是象徵性地定義了兩個欄位name...


Django ORM 中的批量操作

在Hibenate中,通過批量提交SQL操作,部分地實現了資料庫的批量操作。但在Django的ORM中的批量操作卻要完美得多,真是一個驚喜。

數據模型定義

首先,定義一個實例使用的django資料庫模型Product,只是象徵性地定義了兩個欄位name和price。

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=200)
    price = models.DecimalField(max_digits=10, decimal_places=2)

批量插入數據

批量插入數據時,只需先生成個一要傳入的Product數據的列表,然後調用bulk_create方法一次性將列表中的數據插入資料庫。

product_list_to_insert = list()
for x in range(10):
    product_list_to_insert.append(Product(name='product name ' + str(x), price=x))
Product.objects.bulk_create(product_list_to_insert)

批量更新數據

批量更新數據時,先進行數據過濾,然後再調用update方法進行一次性地更新。下麵的語句將生成類似update...where...的SQL語句。

Product.objects.filter(name__contains='name').update(name='new name')

批量刪除數據

批量更新數據時,先是進行數據過濾,然後再調用delete方法進行一次性地刪除。下麵的語句將生成類似delete from...where...的SQL語句。

Product.objects.filter(name__contains='name query').delete()

如果是通過運行普通Python腳本的方式而不是在view中調用上述的代碼的,別忘了先在腳本中進行django的初始化:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "testproject.settings")

import django
django.setup()

Hibernate的所謂“批量操作”中,對每一個實體的更新操作,都會生成一條update語句,然後只是把好幾個update語句一次性提交給資料庫伺服器而已。對實體的刪除操作也是一樣。

Django ORM中的批量操作的實現更接近於SQL操作的體驗,運行效率也會比Hibernate中的實現更加高效。


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

-Advertisement-
Play Games
更多相關文章
  • 回到目錄Lind.DDD.Repositories.EF以下簡稱Repositories.EF,之所以把它從Lind.DDD中拿出來,完全出於可插拔的考慮,讓大家都能休會到IoC的魅力,用到哪種方法持久化,就將那個DLL放到應用程式中,完全不需要把所有持久化方式耦合到一個項目里,這也是遵循了OCP的...
  • 回到目錄Lind.DDD.Domain位於Lind.DDD核心項目中,它主要面向領域實體而設計,由一個IEntity的標識介面,EntityBase基類和N個Entity實體類組成,其中IEntity主要用來標識,在倉儲操作時,用它來表明操作的實體範圍和約束;EntityBase定義了幾個公用的屬性...
  • hi懶癌是最可怕的癌了吧,在即將迎來本命年時,給自己定下每天必乾的幾件成習慣的事情,望不再鴿!!php是我一直在學習的東西,但總以為php簡單,難點在需要掌握大量的相關知識,其實並不完全對,php也是有演算法好吧,php也值得認真對待,既然決定學了,拿點樣子出來啊,是男人吧。1、PHP一、PHP基.....
  • 1 package com.test; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputSt.....
  • 數組與指針閱讀如下代碼,為何出錯。 1 int main() { 2 char a[] = { "I am a bad boy" }; 3 char * pA = new char[ sizeof( a ) ]; 4 pA = a; 5 6 ...
  • 說到Java web開發,就不得不提Servlet 和 JSP。這兩者是java web開發技術。雖然現在有這麼多的web框架,公司中很少會用這兩個技術來直接開發項目,但是理解了這兩個技術,一則會讓你對web的基礎知識要很深的瞭解,二則學其他的相比來說要更好理解點。一、Servlet1. 什麼是se...
  • 前文中介紹了FlowLayout和BorderLayout 本文我們將會繼續介紹java中的佈局方式(3)GridLayout 網格佈局 這種佈局會將整個容器劃分成M行*N列的網格。如下圖: 由模型圖我們可以知道這種佈局,類似於我們常見的掃雷、計算器等軟體的佈局。這種佈局的構造函數有三種1 G...
  • 2016-01-03 Swith(整數選擇因數):必須是int或char這樣的整數值。 Java中不包含goto語句,但是可以通過標識符實現類似的控制。
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...