Python의 ORM 프레임워크인 Django ORM에 대한 자세한 설명

王林
풀어 주다: 2023-06-11 09:12:07
원래의
2733명이 탐색했습니다.

Django ORM은 Python의 고전적인 ORM 프레임워크이며 Django 웹 프레임워크의 일부이며 데이터베이스 작업을 위한 편리한 방법을 제공합니다. ORM은 관계형 데이터베이스의 테이블을 Python의 클래스에 매핑하여 개발 프로세스를 단순화하고 개발 효율성을 향상시킬 수 있는 개체 관계형 매핑(Object Relational Mapping)을 나타냅니다. 이번 글에서는 Django ORM을 자세히 소개하겠습니다.

I. ORM의 기본 개념

ORM은 객체를 관계형 데이터베이스에 매핑하는 기술입니다. 주로 다음 세 가지 기능을 구현합니다.

  • 데이터베이스의 테이블은 Python의 클래스에 매핑됩니다.
  • 데이터베이스의 필드는 Python의 속성에 매핑됨
  • 데이터베이스의 레코드가 Python의 인스턴스에 매핑됨

ORM의 가장 큰 장점은 반복적인 SQL 문을 작성하는 개발자의 시간과 노력을 줄여주고, SQL 문.

II. Django ORM의 장점

다른 ORM 프레임워크와 비교하여 Django ORM은 다음과 같은 장점이 있습니다.

  • 간단하고 사용하기 쉬움: Django ORM의 API는 매우 간단하고 익히고 사용하기 쉽습니다.
  • Rich API: Django ORM은 추가, 삭제, 수정, 쿼리 등과 같은 일반적인 데이터베이스 작업을 완료하기 위한 풍부한 API를 제공합니다. 또한 고급 쿼리 및 집계 쿼리와 같은 작업도 지원합니다.
  • 우수한 확장성: Django ORM은 Django REST 프레임워크, Django-Oscar 등과 같은 다른 타사 라이브러리와 원활하게 통합될 수 있습니다.
  • 자동 매핑: Django ORM은 자동 매핑을 지원합니다. 개발자는 데이터베이스 테이블의 구조만 정의하면 해당 Python 클래스가 자동으로 생성되므로 개발 과정에서 반복되는 코드의 양이 줄어듭니다.

III.Django ORM 사용 방법

  1. Django 설치

먼저 Django를 설치해야 하며, pip를 사용하여 설치할 수 있습니다.

pip install Django
로그인 후 복사
  1. 모델 정의

Django ORM을 사용할 때 다음을 수행해야 합니다. 먼저 모델 클래스를 정의합니다. 모델 클래스 데이터 테이블의 필드와 테이블 이름, 인덱스 등과 같은 데이터 테이블의 기타 메타데이터를 정의하는 Python의 클래스입니다. 다음은 간단한 모델 클래스 정의입니다.

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=50)
    pub_date = models.DateTimeField()
로그인 후 복사

위 코드에서는 Django ORM에서 제공하는 models 모듈을 사용하여 Book이라는 데이터 테이블을 정의합니다. 세 개의 필드: title, author, pub_date. max_length는 문자열 유형 필드의 최대 길이를 지정하는 데 사용되며, DateTimeField는 시간 유형 필드를 저장하는 데 사용됩니다. models模块来定义了一个名为Book的数据表,其中包含了三个字段:titleauthorpub_datemax_length用于指定字符串类型字段的最大长度,DateTimeField用于存储时间类型字段。

  1. 创建数据库表

在完成模型类的定义后,需要通过迁移生成数据库表。Django ORM提供了自动迁移功能,只需运行以下命令即可生成数据表:

python manage.py makemigrations
python manage.py migrate
로그인 후 복사

以上命令创建了Book表,表结构与定义的模型类对应。

  1. CRUD操作

a. 创建记录

通过模型类可以轻松地向数据表中添加新的记录,在以下代码中,我们创建了一条新的记录并将其保存到数据库中:

from datetime import datetime
book = Book(title='Django ORM Tutorial', author='Terry', pub_date=datetime.now())
book.save()
로그인 후 복사

b. 更新记录

使用Django ORM更新记录非常简单,只需先查询记录,然后将其更新并保存即可。以下是一个简单的更新代码示例:

book = Book.objects.get(id=1)
book.title = 'Updated Title'
book.save()
로그인 후 복사

c. 删除记录

删除记录也非常简单,只需执行以下代码即可:

book = Book.objects.get(id=1)
book.delete()
로그인 후 복사

d. 查询记录

在Django ORM中,可以使用objects对象进行查询,以下是一个简单的查询示例代码:

books = Book.objects.all()
for book in books:
    print(book.title, book.author, book.pub_date)
로그인 후 복사

该代码将输出Book表中所有记录的titleauthorpub_date字段。

IV. 高级查询操作

除了基本的CRUD操作外,Django ORM还支持一些高级查询操作,如连表查询、查询条件组合、聚合操作等,以下是一些示例代码。

a. 连表查询

Django ORM中支持两种方式的连表查询:一种是通过ForeignKey字段进行关联,另一种是通过自定义查询进行关联。

# 通过ForeignKey字段关联
class Author(models.Model):
    name = models.CharField(max_length=50)

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

books = Book.objects.filter(author__name='Leo Tolstoy')
# 以上代码查询了作者名为'Leo Tolstoy'的所有图书

# 通过自定义查询进行关联
books = Book.objects.raw('SELECT * FROM app_book INNER JOIN app_author ON app_book.author_id = app_author.id WHERE app_author.name = %s', ['Leo Tolstoy'])
로그인 후 복사

b. 查询条件组合

在Django ORM中,可以使用Q对象将多个查询条件进行组合,以实现更加复杂的查询。以下是一个示例代码:

from django.db.models import Q

books = Book.objects.filter(Q(title__contains='Django') | Q(author__contains='Guido'))
# 以上代码查询了标题中包含'Django'或作者名中包含'Guido'的所有图书
로그인 후 복사

c. 聚合操作

聚合操作用于对数据进行分组或汇总统计。Django ORM中支持的聚合操作包括:AvgMaxMinCountSum

    Create 데이터베이스 테이블

    모델 클래스 정의가 완료되면 마이그레이션을 통해 데이터베이스 테이블을 생성해야 합니다. Django ORM은 자동 마이그레이션 기능을 제공합니다. 다음 명령을 실행하면 데이터 테이블이 생성됩니다.

    from django.db.models import Avg
    
    avg_pub_date = Book.objects.all().aggregate(Avg('pub_date'))
    # 以上代码计算了所有图书的发布时间的平均值
    로그인 후 복사
    🎜위 명령은 Book 테이블을 생성하고 테이블 구조는 정의된 모델 클래스에 해당합니다. 🎜
      🎜CRUD 작업🎜🎜🎜a. 레코드 생성🎜🎜모델 클래스를 통해 데이터 테이블에 새 레코드를 쉽게 추가할 수 있습니다. 다음 코드에서는 새 레코드를 생성하고 추가합니다. 데이터베이스에 저장됨: 🎜rrreee🎜b. 레코드 업데이트 🎜🎜Django ORM을 사용하여 레코드를 업데이트하는 것은 매우 간단합니다. 먼저 레코드를 쿼리한 다음 업데이트하고 저장하면 됩니다. 다음은 간단한 업데이트 코드 예입니다. 🎜rrreee🎜c. 레코드 삭제 🎜🎜 레코드 삭제도 매우 간단합니다. 🎜rrreee🎜d 레코드 쿼리 🎜🎜 Django ORM에서는 를 사용할 수 있습니다. object 개체를 쿼리할 경우 다음은 간단한 쿼리 예제 코드입니다. 🎜rrreee🎜이 코드는 Book에 있는 모든 기록의 제목, 를 출력합니다. > 테이블 >authorpub_date 필드. 🎜🎜IV. 고급 쿼리 작업🎜🎜Django ORM은 기본 CRUD 작업 외에도 조인 테이블 쿼리, 쿼리 조건 조합, 집계 작업 등과 같은 일부 고급 쿼리 작업도 지원합니다. 다음은 몇 가지 샘플 코드입니다. 🎜🎜a. 조인 테이블 쿼리🎜🎜Django ORM은 두 가지 조인 테이블 쿼리 방법을 지원합니다. 하나는 ForeignKey 필드를 통해 연결하는 것이고, 다른 하나는 사용자 지정 쿼리를 통해 연결하는 것입니다. 🎜rrreee🎜b. 쿼리 조건 조합🎜🎜Django ORM에서는 Q 개체를 사용하여 여러 쿼리 조건을 결합하여 더 복잡한 쿼리를 수행할 수 있습니다. 다음은 샘플 코드입니다. 🎜rrreee🎜c. 집계 작업 🎜🎜 집계 작업은 데이터를 그룹화하거나 통계를 요약하는 데 사용됩니다. Django ORM에서 지원되는 집계 작업에는 Avg, Max, Min, Count, Sum이 포함됩니다. 코드>등 다음은 샘플 코드입니다. 🎜rrreee🎜V. 요약🎜🎜이 문서에서는 Python의 ORM 프레임워크 Django ORM에 대해 자세히 소개합니다. Django ORM은 개발자가 신속한 개발과 보다 효율적인 데이터베이스 운영을 달성하는 데 도움이 되는 사용하기 쉽고 기능이 풍부하며 확장 가능한 ORM 프레임워크입니다. 기본 CRUD 작업 외에도 Django ORM은 조인 테이블 쿼리, 쿼리 조건 조합, 집계 작업 등과 같은 일부 고급 쿼리 작업을 지원하여 더 많은 데이터 작업의 요구 사항을 충족할 수 있습니다. 🎜

    위 내용은 Python의 ORM 프레임워크인 Django ORM에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!