Python ORM - Django ORM 和 SQL,利弊简述!

 Python ORM 개념도 이미지
(Python ORM 概念图)

Python ORM - Django ORM 与 SQL,哪个更好?

在使用数据库时,您是否曾为 SQL 而头疼?"我真的需要每次都写这么复杂的 SQL 语法吗......" 🤔 🤔

如果是这样的话 Python 是时候了解 ORM 了,尤其是 Django ORM 是一种强大的工具,每个 Python 开发人员都应该至少使用一次。

在本帖中,我们将使用 什么是 Python ORM、它的优缺点以及 Django ORM 与 SQL 的比较一目了然,到最后你会对数据库更加熟悉!

什么是 ORM?

ORM(对象关系映射)是 使用面向对象编程语言处理数据库的技巧简而言之,它是一款无需 SQL 即可让您使用 Python 代码操作数据库的工具。

Python ORM 작업 흐름도 이미지
(Python ORM 工作流程图)

ORM 的关键概念

  1. 表 → 类:将数据库中的表格映射到 Python 类。
  2. 行 → 对象:表格中的每一行都会转换为类对象。
  3. 查询 → 方法Python:通过调用 Python 方法而不是 SQL 来操作数据。

例如,要添加数据,您可以这样做。

  • SQL 方法: INSERT INTO users (name, age) VALUES ('Alice', 25);
  • ORM 方法: user = User(name="Alice", age=25); user.save()

这种 ORM 的妙处在于,你不需要懂 SQL,就能以面向对象的方式处理数据。

Python ORM 的缺点和优点

Python ORM 단점과 장점 정리 이미지

Python ORM 缺点

  1. 复杂查询限制JOIN 或批量数据处理的性能可能不如 SQL。
  2. 抽象成本ORM 会自动生成 SQL,这会带来额外的性能开销。
  3. 所需学习时间学习 ORM 语法和模型设计需要时间。

Python ORM 的优势

  1. 加快发展无需编写 SQL,开发速度更快。
  2. 提高可读性:代码直观,便于初学者理解。
  3. 易于维护:维护简单,因为数据库发生变化时只需修改模型。
  4. DB 独立性它兼容多种数据库(MySQL、PostgreSQL 等),因此具有高度可扩展性。

Django ORM 与 SQL

与真实世界的例子进行比较

现在,让我们比较一下 Raw SQL 和 Django ORM,后者是 Python ORM 的代表。

Django ORM vs SQL 이미지

1. 使用 Django ORM 添加数据

# models.py
from django.db import models

类 User(models.Model):
    name = models.CharField(max_length=100)
    age = models.IntegerField()

添加 # 数据
user = User(name="Alice", age=25)
user.save()

# 代码详见本帖末尾!

2. 使用 SQL 添加数据

INSERT INTO users (name, age) VALUES ('Alice', 25);

3. 主要差异

  • 代码简洁Django:Django ORM 比 SQL 更直观、更简洁。
  • 可维护性Django:在修改数据库时,Django ORM 更易于修改。
  • 性能对于复杂的查询,SQL 可能更快。

什么时候应该使用 Django ORM 与 SQL?

当 Django ORM 适合您时

  • 当简单的 CRUD 操作(添加、检索、修改和删除数据)成为常态时。
  • 当您想快速处理数据库时。

什么时候 SQL 适合您

  • 如果需要复杂查询(JOIN、子查询等)。
  • 在大型应用中,性能优化至关重要。

Django ORM 代码示例

# models.py
from django.db import models

类 User(models.Model):
    用户) name = models.CharField(max_length=100) # name 字段(字符串)
    age = models.IntegerField() # 年龄字段(整数)

添加 # 数据
user = User(name="Alice", age=25) 创建 # 对象
user.save() 保存到 # 数据库

检索 # 数据
users = User.objects.all() 获取所有 # 数据
for users in users:
    print(user.name, user.age)

# 修改数据
alice = User.objects.get(name="Alice") # 根据特定条件检索数据
alice.age = 26 # 修改年龄
alice.save() # 保存更改

# 删除数据
alice.delete() # 删除数据

代码评注

  1. 定义模型: Django 的 模型.模型 定义一个从该类继承并与数据库关联的类。
    • CharField:存储字符串数据。
    • IntegerField:存储整数数据。
  2. 创建对象: 用户(name="Alice",年龄=25)来创建用户对象。
  3. 存储数据: 保存() 方法保存到数据库。
  4. 获取数据: objects.all() 方法获取所有数据。
  5. 修改数据: 获取()获取特定数据并更改值,然后使用 保存()来拯救它。
  6. 删除数据: 删除() 方法删除数据。

总结

在本文中,我们将使用 Python ORM从基本概念,到"...... Django ORM 与 SQL 我们甚至做过比较。Django ORM 已成为 Python 开发人员的强大工具,它抽象掉了 SQL 的复杂性,使开发更富成效。不过,当需要进行复杂查询时,SQL 可能仍然更可取。

如果您以前在数据库管理方面遇到过困难,Django ORM 是一个很好的开始。这是 Python 开发人员必备的技能! 😊 如果您对 Django 感兴趣,请查看 创建 Python Django 网站:新手指南 看看这篇文章!

# 代码说明

# models.py
from django.db import models
  1. 该文件保存为 "models.py"。这是 Django 中定义模型的标准文件名。
  2. 从 "django.db "中导入 "models "模块,它提供了 Django 的 ORM 功能。
类 User(models.Model):
  1. 定义一个名为 "用户 "的新类。
  2. 该类继承自 "models.Model",这使得 User 类成为一个 Django 模型。
    name = models.CharField(max_length=100)
  1. 定义一个名为 "名称 "的字段。
  2. 该字段属于 CharField 类型,用于存储字符串。
  3. max_length=100 "表示该字段最多可存储 100 个字符。
    age = models.IntegerField()
  1. 定义一个名为 "年龄 "的字段。
  2. 该字段属于 IntegerField 类型,用于存储整数。
添加 # 数据
user = User(name="Alice", age=25)
  1. 创建一个新的用户模型实例。
  2. 在 "姓名 "字段中输入 "Alice",在 "年龄 "字段中输入 25。
user.save()
  1. 调用 "save() "方法将创建的用户实例保存到数据库中。
  2. 该命令执行实际 SQL INSERT 查询。
테리 이모티콘
(快乐编码)

类似文章