Python实现ORM对象关系映射,方便数据持久化操作

一、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/n/148888.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
GOSTGOST
上一篇 2024-11-04 17:49
下一篇 2024-11-04 17:49

相关推荐

  • 面向对象编程、类和对象

    面向对象编程(Object-Oriented Programming, OOP)是一种编程方法,它将现实世界中的事物抽象为对象(Object),对象的属性和方法被封装成类(Clas…

    编程 2025-04-29
  • 依赖关系代码的用法介绍

    依赖关系代码在软件开发中扮演着至关重要的角色。它们指定了项目中各个模块之间的依赖关系。本文将从多个方面对依赖关系代码进行详细的阐述。 一、依赖关系代码的作用 依赖关系代码可以帮助开…

    编程 2025-04-28
  • Mapster:一个高性能的对象映射库

    本文将深入介绍furion.extras.objectmapper.mapster,一个高性能的对象映射库,解释它是如何工作的以及如何在你的项目中使用它。 一、轻松地实现对象之间的…

    编程 2025-04-28
  • ORM持久层

    ORM(对象关系映射)是一种编程技术,它将面向对象的编程语言中的对象与关系型数据库中的表进行映射。通过ORM,我们可以用面向对象的方式操作数据库,减少了手写SQL语句的复杂度以及对…

    编程 2025-04-28
  • Python返回对象类型

    Python是一种动态、解释型、高级编程语言。Python是一种面向对象的语言,即所有的一切都是一个对象。 一、基本类型 Python中的基本类型有整数int、浮点数float、布…

    编程 2025-04-28
  • Python中通过对象不能调用类方法和静态方法的解析

    当我们在使用Python编写程序时,可能会遇到通过对象调用类方法和静态方法失败的问题,那么这是为什么呢?接下来,我们将从多个方面对这个问题进行详细解析。 一、类方法和静态方法的定义…

    编程 2025-04-27
  • Java持久层框架的复合主键实现

    用Java持久层框架来操作数据库时,复合主键是常见的需求。这篇文章将详细阐述javax.persistence复合主键的实现方式,并提供完整的示例代码。 一、复合主键的定义 复合主…

    编程 2025-04-27
  • Python内置函数——查看对象内存

    本文将介绍Python内置函数中,在开发中查看对象内存的相关函数。 一、id()函数 id()函数是Python内置函数,用于返回对象的唯一标识符,也就是对象在内存中的地址。 nu…

    编程 2025-04-27
  • Python实现天气关系图

    本文将介绍如何使用Python绘制天气关系图,通过分析和可视化天气数据,帮助我们更好地了解天气的变化和趋势。 一、数据准备 首先我们需要从数据源中获取天气数据。我们可以使用爬虫技术…

    编程 2025-04-27
  • Python和数学的关系

    Python是一门开源、高级、通用的编程语言,广泛应用于科学计算、人工智能、数据分析等领域。而数学则是Python的一个重要应用领域。Python的简洁、灵活的语法和庞大的数学库,…

    编程 2025-04-27

发表回复

登录后才能评论