国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Django ORM:數(shù)據(jù)庫操作的Python化藝術(shù)

這篇具有很好參考價值的文章主要介紹了Django ORM:數(shù)據(jù)庫操作的Python化藝術(shù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

? ??


概要

Django的對象關(guān)系映射器(ORM)是其核心功能之一,允許開發(fā)者使用Python代碼來定義、操作和查詢數(shù)據(jù)庫。這篇文章將帶你深入了解Django ORM的強大之處,從基本概念到高級查詢技巧,提供豐富的示例幫助你掌握使用Django ORM進行有效和高效的數(shù)據(jù)庫操作。


1. Django ORM基礎(chǔ)

Django ORM的目的是提供一種簡單的方法用來:

  • 將復(fù)雜的SQL查詢轉(zhuǎn)換為Python代碼

  • 保護項目免受SQL注入攻擊

  • 提供數(shù)據(jù)庫后端的獨立性

定義模型

在Django中,每個數(shù)據(jù)庫表由一個Python類表示,這個類繼承自django.db.models.Model。

from?django.db?import?models

class?Author(models.Model):
????name?=?models.CharField(max_length=100)
????age?=?models.IntegerField()

????def?__str__(self):
????????return?self.name

進行數(shù)據(jù)庫遷移

定義模型后,使用makemigrationsmigrate命令創(chuàng)建或更新數(shù)據(jù)庫結(jié)構(gòu)。

python?manage.py?makemigrations
python?manage.py?migrate

2. 創(chuàng)建記錄

使用模型的構(gòu)造函數(shù)創(chuàng)建新記錄。

new_author?=?Author(name='J.K.?Rowling',?age=54)
new_author.save()

使用create方法

可以使用模型管理器的create方法更快捷地創(chuàng)建記錄。

Author.objects.create(name='George?R.R.?Martin',?age=71)

3. 讀取記錄

Django ORM提供了豐富的API來查詢數(shù)據(jù)庫。

獲取所有記錄

authors?=?Author.objects.all()

獲取單個記錄

author?=?Author.objects.get(name='J.K.?Rowling')

過濾記錄

young_authors?=?Author.objects.filter(age__lt=50)

排除特定記錄

old_authors?=?Author.objects.exclude(age__lt=50)

4. 更新記錄

更新記錄就像修改任何其他Python對象。

author?=?Author.objects.get(name='J.K.?Rowling')
author.age?=?55
author.save()

批量更新

Author.objects.filter(age__lt=50).update(age=50)

5. 刪除記錄

刪除記錄也很直接。

author?=?Author.objects.get(name='J.K.?Rowling')
author.delete()

批量刪除

Author.objects.filter(age__gt=70).delete()

6. 高級查詢操作

Django ORM的真正威力在于它的查詢能力。

關(guān)聯(lián)查詢

class?Book(models.Model):
????title?=?models.CharField(max_length=200)
????author?=?models.ForeignKey(Author,?on_delete=models.CASCADE)

books?=?Book.objects.filter(author__name='J.K.?Rowling')

聚合查詢

from?django.db.models?import?Avg
average_age?=?Author.objects.all().aggregate(Avg('age'))

使用Q對象進行復(fù)雜查詢

from?django.db.models?import?Q
authors?=?Author.objects.filter(Q(age__gt=50)?|?Q(name__startswith='J'))

7. 數(shù)據(jù)庫函數(shù)和表達式

Django ORM還允許開發(fā)者在查詢中使用數(shù)據(jù)庫函數(shù)。

使用F表達式比較字段值

from?django.db.models?import?F
authors?=?Author.objects.filter(age__gt=F('age')?-?10)

使用注解添加臨時字段

from?django.db.models?import?Count
books?=?Book.objects.annotate(num_authors=Count('author'))

8. ORM的優(yōu)化

大型項目中,ORM的性能變得尤其重要。

使用select_relatedprefetch_related

減少數(shù)據(jù)庫查詢次數(shù)。

#?select_related用于“一對一”和“多對一”關(guān)系
books?=?Book.objects.select_related('author')

#?prefetch_related用于“多對多”和“一對多”關(guān)系
authors?=?Author.objects.prefetch_related

('book_set')

延遲字段加載

使用onlydefer來控制加載的字段。

Author.objects.defer('age')

結(jié)論

Django ORM提供了一個強大的抽象層來操作數(shù)據(jù)庫,使得開發(fā)者可以避免寫原生SQL并更專注于業(yè)務(wù)邏輯。通過這篇文章,你應(yīng)該對如何高效地使用Django ORM有了清晰的理解。不過,值得注意的是,ORM的使用并非沒有代價,有時它可能會隱藏性能問題,所以理解它的內(nèi)部工作原理對于優(yōu)化查詢和提升性能是至關(guān)重要的。在深入使用之前,閱讀官方文檔并深入了解Django ORM的工作方式是一個不錯的選擇。文章來源地址http://www.zghlxwxcb.cn/news/detail-758893.html

到了這里,關(guān)于Django ORM:數(shù)據(jù)庫操作的Python化藝術(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • python常用庫之pymongo庫(Python操作Mongodb數(shù)據(jù)庫)| Django項目連接MongoDB方式選型(MongoEngine)

    github:https://github.com/mongodb/mongo-python-driver PyMongo用于與Python與MongoDB數(shù)據(jù)庫進行交互的工具。bson包是Python的BSON格式 的實現(xiàn)。Pymongo包是MongoDB的本地Python驅(qū)動程序。gridfs包是gridfs 的pymongo實現(xiàn)。 Pymongo支持MongoDB 3.6、4.0、4.2、4.4、5.0和6.0。 總結(jié):PyMongo 是 MongoDB 與 Django 交互的標(biāo)準(zhǔn)

    2024年02月10日
    瀏覽(26)
  • Django ORM:最全面的數(shù)據(jù)庫處理指南

    深度探討Django ORM的概念、基礎(chǔ)使用、進階操作以及詳細解析在實際使用中如何處理數(shù)據(jù)庫操作。同時,我們還討論了模型深入理解,如何進行CRUD操作,并且深化理解到數(shù)據(jù)庫遷移等高級主題。為了全面解讀Django ORM,我們也討論了其存在的不足,并對其未來發(fā)展進行了展望。

    2024年02月13日
    瀏覽(25)
  • python常用庫之?dāng)?shù)據(jù)庫orm框架之SQLAlchemy

    python常用庫之?dāng)?shù)據(jù)庫orm框架之SQLAlchemy

    官網(wǎng):https://www.sqlalchemy.org/ SQLAlchemy是一個基于Python實現(xiàn)的SQL工具包和ORM框架,提供了高層抽象來管理數(shù)據(jù)庫交互。 SQLAlchemy功能強大,可以省去很多手動管理數(shù)據(jù)庫連接、資源、事務(wù)等重復(fù)工作,讓開發(fā)者更加高效地使用數(shù)據(jù)庫。許多大型Python項目都選擇使用SQLAlchemy作為ORM框架

    2024年02月07日
    瀏覽(52)
  • Django創(chuàng)建應(yīng)用、ORM的進階使用及模型類數(shù)據(jù)庫遷移

    Django創(chuàng)建應(yīng)用、ORM的進階使用及模型類數(shù)據(jù)庫遷移

    Django 項目就是基于 Django 框架開發(fā)的 Web 應(yīng)用,它包含了一組配置和多個應(yīng)用,我們把應(yīng)用稱之為 App,在前文中對它也做了相應(yīng)的介紹,比如 auth、admin,它們都屬于 APP。 一個 App 就是一個 Python 包,通常一個 App 可以包含模型、視圖、模板和 URL 配置文件,可以被應(yīng)用到多個

    2024年02月09日
    瀏覽(94)
  • SQLAlchemy ORM指南:簡化數(shù)據(jù)庫操作的最佳實踐

    SQLAlchemy ORM指南:簡化數(shù)據(jù)庫操作的最佳實踐

    背景: ? SQLAlchemy是一個數(shù)據(jù)庫的ORM框架,讓我們操作數(shù)據(jù)庫的時候不要再用SQL語句了,跟直接操作模型一樣。操作十分便捷,其實SQLAlchemy應(yīng)該是在Flask和Django應(yīng)用的特別多,而且在flask中已經(jīng)集成了flask_sqlalchemy ,好像是 SQLAlchemy的作者和 Flask是同一個,背景了解到這里就可

    2024年01月20日
    瀏覽(57)
  • 【python】Django——連接mysql數(shù)據(jù)庫

    【python】Django——連接mysql數(shù)據(jù)庫

    筆記為自我總結(jié)整理的學(xué)習(xí)筆記,若有錯誤歡迎指出喲~ 【Django專欄】 Django——django簡介、django安裝、創(chuàng)建項目、快速上手 Django——templates模板、靜態(tài)文件、django模板語法、請求和響應(yīng) Django——連接mysql數(shù)據(jù)庫 ORM(Object-Relational Mapping)是一種編程技術(shù),它允許開發(fā)者使用面

    2024年02月04日
    瀏覽(34)
  • python+django遷移數(shù)據(jù)庫成功但是數(shù)據(jù)庫中還沒表產(chǎn)生

    1、刪除原來的文件(我這沒了,反正就是之前執(zhí)行下面兩條命令生成的文件) 2、檢查settings.py中DATABASES參數(shù),首先是數(shù)據(jù)庫的信息對不對。我這里是因為ENGINE=“django.db.backends.sqlite3” 因為我使用的數(shù)據(jù)庫是mysql,所以修改成“django.db.backends.mysql”就好了,就這搞了一天,真

    2024年02月11日
    瀏覽(29)
  • Python Django 之連接 Mysql 數(shù)據(jù)庫詳解

    Python Django 之連接 Mysql 數(shù)據(jù)庫詳解

    博客:https://blog.csdn.net/qq_34745941/article/details/122549376 若已安裝,請忽略。 主要使用的文件如圖 若 pip 安裝失敗,可進入 Python 官方庫中下載 whl 文件,操作可參考: 博客:https://blog.csdn.net/qq_34745941/article/details/106341898 在 settings.py 中,配置 Mysql 的連接串 擴展: Django 也支持其

    2024年02月04日
    瀏覽(27)
  • python+django+mysql項目實踐二(前端及數(shù)據(jù)庫)

    python+django+mysql項目實踐二(前端及數(shù)據(jù)庫)

    Pycharm 開發(fā)環(huán)境 Django 前端 MySQL 數(shù)據(jù)庫 Navicat 數(shù)據(jù)庫管理 添加模板 在templates下創(chuàng)建 views文件中添加 在setting文件中進行配置 在Terminal輸入命令下發(fā)指令

    2024年02月14日
    瀏覽(23)
  • python#django數(shù)據(jù)庫一對一/一對多/多對多

    python#django數(shù)據(jù)庫一對一/一對多/多對多

    搭建 # 一對一 class?? TestUser(models.Model): ??? username=models.CharField(max_length=32) ??? password = models.CharField(max_length=32) class TestInfo(models.Model): ??? mick_name=models.CharField(max_length=32) ??? user=models.OneToOneField(to=TestUser,on_delete=models.CASCADE()#on_delete 刪除的模式 CASCADE 級聯(lián)刪除 讓后執(zhí)行數(shù)

    2024年02月14日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包