Django筆記二十六之資料庫函數之數學公式函數

来源:https://www.cnblogs.com/hunterxiong/archive/2023/04/20/17338474.html
-Advertisement-
Play Games

本文首發於公眾號:Hunter後端 原文鏈接:Django筆記二十六之資料庫函數之數學公式函數 這一篇來介紹一下公式函數,主要是數學公式。 其中 sin,cos 這種大多數情況下用不上的就不介紹了,主要介紹下麵幾種: Abs() 絕對值 Ceil() 向上取整 Floor() 向下取整 Mod() ...


本文首發於公眾號:Hunter後端
原文鏈接:Django筆記二十六之資料庫函數之數學公式函數

這一篇來介紹一下公式函數,主要是數學公式。

其中 sin,cos 這種大多數情況下用不上的就不介紹了,主要介紹下麵幾種:

  1. Abs() 絕對值
  2. Ceil() 向上取整
  3. Floor() 向下取整
  4. Mod() 取餘
  5. Power() 乘方
  6. Round() 四捨五入
  7. Sqrt() 獲取平方根

我們用到下麵這個 model:

class MathFunction(models.Model):
    x = models.FloatField(null=True, default=None)
    y = models.FloatField(null=True, default=None)

1、Abs() 絕對值

先來創建一下數據:

from blog.models import MathFunction

MathFunction.objects.create(x=1.2, y=-6.3)

使用絕對值的函數:

from django.db.models.functions import Abs

obj = MathFunction.objects.annotate(x_abs=Abs('x'), y_abs=Abs('y')).get(id=1)

print(obj.x_abs)
print(obj.y_abs)

也可以在過濾的時候用該函數,但是需要先將這個函數註冊,使用方法如下:

from django.db.models import FloatField
from django.db.models.functions import Abs

FloatField.register_lookup(Abs)
MathFunction.objects.filter(x__abs__lte=2)

2、Ceil() 向上取整

向上取整
和絕對值一樣,可以在取數和過濾的時候使用

取值:

from django.db.models.functions import Ceil

obj = MathFunction.objects.annotate(x_ceil=Ceil('x'), y_ceil=Ceil('y')).get(id=1)

print(obj.x_ceil)
print(obj.y_ceil)

過濾:

from django.db.models import FloatField
from django.db.models.functions import Ceil

FloatField.register_lookup(Ceil)
MathFunction.objects.filter(x__ceil=2)

3、Floor() 向下取整

向下取整,使用方法同向上取整。

4、Mod() 取餘

取模,也就是取餘,兩個數相除之後的餘數。

MathFunction.objects.create(x=3.6, y=1.1)


from django.db.models.functions import Mod

obj = MathFunction.objects.annotate(mod=Mod('x', 'y')).get(id=2)
print(obj.mod)

其效果等效於 x % y

5、Power() 乘方

乘方,Power('x', 'y') 相當於 x ** y

MathFunction.objects.create(x=3, y=2)

from django.db.models.functions import Power

obj = MathFunction.objects.annotate(power=Power('x', 'y')).get(id=3)
print(obj.power)

6、Round() 四捨五入

四捨五入,示例如下:

from django.db.models.functions import Round

obj = MathFunction.objects.annotate(
    x_round=Round('x'),
    y_round=Round('y')
).get(id=1)

print(obj.x_round)
print(obj.y_round)

7、Sqrt() 獲取平方根

MathFunction.objects.create(x=9, y=25)

from django.db.models.functions import Sqrt

obj = MathFunction.objects.annotate(x_sqrt=Sqrt('x'), y_sqrt=Sqrt('y')).get(id=4)

print(obj.x_sqrt)
print(obj.y_sqrt)

以上就是本篇筆記全部內容,下一篇將介紹資料庫函數之文本函數。

如果想獲取更多後端相關文章,可掃碼關註閱讀:
image


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

-Advertisement-
Play Games
更多相關文章
  • 結合京東業務研發實際情況,針對後端研發人員,設計一個微服務低代碼平臺,助力更高效低交付業務需求。現已結業,將我在本次項目中沉澱設計出的設計文檔整理成文,期待與大家有進一步的碰撞溝通 ...
  • 下載Opencv 先去官網https://opencv.org/opencv-4-7-0/下載, 找到適合你設備的版本下載Windows就是Win pack,完成後進行安裝即可,一路同意預設就行,可以更改安裝位置,但路徑上儘可能以英文,以防止後面不必要的問題。 2.下載Python 首先是版本 發文 ...
  • 說明 使用 VLD 記憶體泄漏檢測工具輔助開發時整理的學習筆記。本篇介紹 VLD 源碼的下載。同系列文章目錄可見 《記憶體泄漏檢測工具》目錄 1. 下載途徑 以 v2.5.1 版本為例,可以到 Github-KindDragon-vld 頁面下載 master 的 zip 源碼包,如下所示: 也可以到 ...
  • 相信大家在學習 Java 的過程中,或多或少都見過 JSR 這個詞。本篇文章就科普下什麼是 JSR。 什麼是 JSR ? JSR(Java Specification Requests),是指 Java 規範請求(或者活規範提案)。這個請求(提案)是提給 JCP 的(Java Community P ...
  • 上周末,去參加了北京思否 hackathon,兩天時間內從腦暴 & 挖掘軟體 IDEA -> Demo 研發路演,這次經歷讓我難忘。這裡我的看法是每個開發者圈友,都應該去參加一次 hackathon ~ 做 niche 軟體正確的方法 這邊先說結論,如圖。我認為 做 niche 軟體正確的方法 或 ...
  • JVM中集成了兩種編譯器,Client Compiler和Server Compiler,它們的作用也不同。Client Compiler註重啟動速度和局部的優化,Server Compiler則更加關註全局的優化,性能會更好,但由於會進行更多的全局分析,所以啟動速度會變慢。兩種編譯器有著不同的應用 ...
  • Rust 的面向對象編程特性 一、面向對象語言的特性 Rust是面向對象編程語言嗎? Rust 受到多種編程範式的影響,包括面向對象 面向對象通常包含以下特性:命名對象、封裝、繼承 對象包含數據和行為 “設計模式四人幫”在《設計模型》中給面向對象的定義: 面向對象的程式由對象組成 對象包裝了數據和操 ...
  • 最近看到一個有趣的問題:Person類具有Hand,Hand可以操作杯子Cup,但是在石器時代是沒有杯子的,這個問題用編程怎麼解決? 簡單代碼實現 我們先用簡單代碼實現原問題: @Data public class Person { private final String name; privat ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...