一、ORM簡介
ORM(Object-Relational Mapping)即對象關係映射,是一種使得程序員可以使用面向對象的方式來操作關係型數據庫的技術。ORM將數據庫表映射成類,將表中的字段映射成類的屬性,將表中的記錄映射成類的實例,從而將數據庫的操作轉化成面向對象的操作。ORM的目的是讓程序員更加直觀地操作數據庫,以及避免SQL語句拼接的麻煩。
二、Python中的ORM庫
Python中有很多優秀的ORM庫,比如Django中自帶的ORM,SQLAlchemy等。這些ORM庫大多數都提供了良好的API以及一套固定的操作規範,能夠方便地進行數據庫的操作。本文以Django自帶的ORM舉例。
三、Django ORM基礎使用
Django ORM的使用非常簡單,只需要定義好Model,並且進行數據庫遷移,就可以直接使用ORM進行操作數據庫。
# 示例代碼 class Person(models.Model): name = models.CharField(max_length=30) age = models.IntegerField() # 數據庫遷移 python manage.py makemigrations python manage.py migrate # CRUD操作 p = Person.objects.create(name='Tom', age=18) p = Person.objects.get(id=1) p.age = 19 p.save() Person.objects.filter(name='Bob').delete()
上述代碼中,定義了一個Person Model,包含了name和age兩個字段。然後進行了數據庫的遷移,生成了對應的數據表。之後就可以使用ORM進行CRUD操作,比如創建、獲取、更新、刪除操作。
四、Django ORM高級用法
Django ORM不僅提供了基礎的CRUD操作,還提供了很多高級的用法,比如聚合操作、條件查詢、鏈式查詢等等。下面舉例說明:
1、聚合操作
Django ORM提供了很多方便的聚合操作,比如求和、平均值、最大值、最小值等等。
# 示例代碼 from django.db.models import Sum, Avg, Max, Min Person.objects.all().aggregate(Sum('age')) Person.objects.all().aggregate(Avg('age')) Person.objects.all().aggregate(Max('age')) Person.objects.all().aggregate(Min('age'))
2、條件查詢
Django ORM提供了豐富的條件查詢方式,能夠靈活地進行篩選操作。
# 示例代碼 Person.objects.filter(age__gte=18) Person.objects.filter(name__startswith='T') Person.objects.filter(age__in=[18, 19]) Person.objects.filter(name__contains='o').exclude(age=18)
3、鏈式查詢
Django ORM支持鏈式查詢,即可以對查詢結果進行進一步篩選。
# 示例代碼 Person.objects.filter(age__gte=18).filter(name__contains='o') Person.objects.filter(Q(age__gte=18) | Q(name__contains='o')) Person.objects.filter(age__gte=18).exclude(name__contains='o')
五、Django ORM性能調優
ORM操作不慢(可能也不快),但是在大型項目中,性能調優仍然非常重要。下面舉例說明,如何對Django ORM進行性能調優。
1、使用select_related、prefetch_related減少查詢次數
在ORM中,如果需要使用到關聯表的信息,會觸發查詢。這樣會增加查詢次數,降低查詢性能。使用select_related、prefetch_related可以減少查詢次數,提高性能。
# 示例代碼 # select_related使用方法 class Book(models.Model): title = models.CharField(max_length=100) author = models.ForeignKey(Author, on_delete=models.CASCADE) books = Book.objects.select_related('author').all() # prefetch_related使用方法 class Tag(models.Model): name = models.CharField(max_length=100) books = models.ManyToManyField(Book) tags = Tag.objects.prefetch_related('books').all()
2、使用緩存減少查詢次數
緩存是性能調優的重要手段之一,Django ORM支持使用緩存,可以將查詢結果緩存起來,避免重複查詢。
# 示例代碼 from django.core.cache import cache books = cache.get('all_books') if not books: books = Book.objects.all() cache.set('all_books', books, 60 * 60 * 24)
六、總結
本文介紹了ORM的基本原理,以及Django ORM的使用方法。Django ORM提供了良好的API以及豐富的查詢方式,可以方便地進行數據庫操作。在大型項目中,性能調優仍然非常重要,需要使用select_related、prefetch_related和緩存等手段優化查詢性能。
原創文章,作者:GOST,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/148888.html