更新時(shí)間:2023-05-18 來(lái)源:黑馬程序員 瀏覽量:
Django的ORM(對(duì)象關(guān)系映射)是一種將數(shù)據(jù)庫(kù)中的數(shù)據(jù)映射到Python對(duì)象中的技術(shù),它使得開(kāi)發(fā)者可以通過(guò)使用Python代碼來(lái)操作數(shù)據(jù)庫(kù),而無(wú)需直接編寫(xiě)SQL語(yǔ)句。ORM還提供了一些便捷的功能,例如查詢優(yōu)化、數(shù)據(jù)驗(yàn)證等。
以下是Django ORM的一些基本用法示例:
from django.db import models class Person(models.Model): name = models.CharField(max_length=50) age = models.IntegerField()
上述代碼中,我們定義了一個(gè) Person 類,它繼承了django.db.models.Model類,并定義了兩個(gè)屬性name 和age,它們分別對(duì)應(yīng)數(shù)據(jù)庫(kù)中的表格中的兩個(gè)列。
person = Person(name='Alice', age=25) person.save()
我們?cè)谝陨洗a中創(chuàng)建了一個(gè)Person對(duì)象,并調(diào)用了save()方法將它保存到數(shù)據(jù)庫(kù)中。
people = Person.objects.all() for person in people: print(person.name, person.age)
我們使用Person.objects.all()方法查詢了數(shù)據(jù)庫(kù)中的所有Person對(duì)象,并遍歷了這些對(duì)象并打印了它們的屬性。
person = Person.objects.get(name='Alice') person.age = 26 person.save()
我們使用Person.objects.get()方法在上述代碼中獲取了一個(gè)名為Alice的Person對(duì)象,并將它的年齡屬性更新為26,然后調(diào)用save()方法將更新保存到數(shù)據(jù)庫(kù)中。
person = Person.objects.get(name='Alice') person.age = 26 person.save()
上述代碼中,我們使用Person.objects.get()方法獲取了一個(gè)名為Alice的Person對(duì)象,并調(diào)用delete()方法將它從數(shù)據(jù)庫(kù)中刪除。
adults = Person.objects.filter(age__gte=18) for adult in adults: print(adult.name)
我們可以使用Person.objects.filter()方法對(duì)數(shù)據(jù)庫(kù)進(jìn)行過(guò)濾,只選出年齡大于等于18歲的Person對(duì)象,并遍歷打印了它們的姓名。
class Book(models.Model): title = models.CharField(max_length=100) author = models.ForeignKey(Person, on_delete=models.CASCADE)
上述代碼中,我們定義了一個(gè)Book類,它有一個(gè)名為author的外鍵關(guān)聯(lián)到Person模型。
books = Book.objects.filter(author__name='Alice') for book in books: print(book.title)
上述代碼中,我們使用Book.objects.filter()方法對(duì)數(shù)據(jù)庫(kù)進(jìn)行過(guò)濾,選出所有作者名為Alice的Book對(duì)象,并遍歷打印了它們的標(biāo)題。
這只是Django ORM的基本用法示例,實(shí)際上Django ORM 還有很多高級(jí)用法和功能,例如聚合、多對(duì)多關(guān)系、多級(jí)關(guān)聯(lián)查詢等。