🗣 Wd提问: 网页开发Django ORM
🤖 Ai回答: Django ORM(对象关系映射)是 Django 框架中一个强大的工具,它允许开发者通过 Python 类和对象来操作数据库,而无需直接使用 SQL 语句。这使得数据库操作更加直观和高效,尤其适合快速开发和维护大型项目。
Django ORM 的基本概念
1、模型(Model):
Django ORM 中的模型是一个继承自 `django.db.models.Model` 的 Python 类。
每个模型类对应数据库中的一张表。
模型类的属性对应表中的字段。
2、字段(Field):
每个字段定义了表中的列。
字段的类型决定了数据的存储格式,例如 `CharField`、`IntegerField`、`DateTimeField` 等。
3、实例(Instance):
模型类的实例代表数据库表中的一行记录。
4、数据库操作:
Django ORM 提供了丰富的 API 来执行数据库操作,例如增删改查。
Django ORM 的主要功能
1、定义模型
在 `models.py` 文件中定义模型类。例如:
python
from django.db import models
class Employee(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
salary = models.DecimalField(max_digits=10, decimal_places=2)
department = models.CharField(max_length=100)
def __str__(self):
return self.name
`CharField`:用于存储字符串类型的数据。
`IntegerField`:用于存储整数类型的数据。
`DecimalField`:用于存储高精度的浮点数数据。
`__str__` 方法用于定义模型对象的字符串表示。
2、迁移数据库
定义完模型后,需要生成数据库表。Django 提供了迁移命令来完成这一任务:
bash
python manage.py makemigrations
python manage.py migrate
`makemigrations`:将模型的更改记录到迁移文件中。
`migrate`:根据迁移文件更新数据库表。
3、数据库操作
Django ORM 提供了丰富的 API 来操作数据库。以下是一些常用操作:
增(Create)
创建一条记录并保存到数据库:
python
employee = Employee(name=Alice, age=30, salary=5000, department=HR)
employee.save()
使用 `objects.create()` 方法一步完成:
python
Employee.objects.create(name=Bob, age=25, salary=4500, department=IT)
查(Retrieve)
查询所有记录:
python
employees = Employee.objects.all()
查询单条记录:
python
employee = Employee.objects.get(id=1)
查询满足条件的记录:
python
employees = Employee.objects.filter(department=IT)
查询记录并排序:
python
employees = Employee.objects.order_by(age)
改(Update)
修改记录并保存:
python
employee = Employee.objects.get(id=1)
employee.salary = 6000
employee.save()
批量更新记录:
python
Employee.objects.filter(department=HR).update(salary=7000)
删(Delete)
删除单条记录:
python
employee = Employee.objects.get(id=1)
employee.delete()
删除满足条件的记录:
python
Employee.objects.filter(age__lt=25).delete()
4、跨表操作
Django ORM 支持跨表查询,包括外键、一对一、多对多等关系。
外键(ForeignKey)
定义外键:
python
class Department(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Employee(models.Model):
name = models.CharField(max_length=100)
department = models.ForeignKey(Department, on_delete=models.CASCADE)
def __str__(self):
return self.name
查询跨表数据:
python
department = Department.objects.get(name=HR)
employees = department.employee_set.all()
多对多(ManyToManyField)
定义多对多关系:
python
class Employee(models.Model):
name = models.CharField(max_length=100)
projects = models.ManyToManyField(Project)
def __str__(self):
return self.name
class Project(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
添加多对多关系:
python
employee = Employee.objects.get(name=Alice)
project = Project.objects.get(name=Project A)
employee.projects.add(project)
查询多对多关系:
python
employee = Employee.objects.get(name=Alice)
projects = employee.projects.all()
一对一(OneToOneField)
定义一对一关系:
python
class User(models.Model):
username = models.CharField(max_length=100)
def __str__(self):
return self.username
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.TextField()
def __str__(self):
return self.user.username
查询一对一关系:
python
user = User.objects.get(username=Alice)
profile = user.profile
5、聚合与分组查询
Django ORM 提供了聚合函数和分组查询功能。
聚合查询
计算总和:
python
from django.db.models import Sum
total_salary = Employee.objects.aggregate(Sum(salary))
print(total_salary[salary__sum])
计算平均值:
python
from django.db.models import Avg
average_age = Employee.objects.aggregate(Avg(age))
print(average_age[age__avg])
分组查询
按部门分组并计算平均工资:
python
from django.db.models import Avg
departments = Employee.objects.values(department).annotate(avg_salary=Avg(salary))
for department in departments:
print(department[department], department[avg_salary])
6、F 和 Q 函数
F 函数:用于在查询中引用字段的值。
python
from django.db.models import F
查询工资大于年龄的员工
employees = Employee.objects.filter(salary__gt=F(age))
Q 函数:用于构建复杂的查询条件。
python
from django.db.models import Q
查询部门为 IT 或工资大于 5000 的员工
employees = Employee.objects.filter(Q(department=IT) | Q(salary__gt=5000))
总结
Django ORM 是一个功能强大的工具,能够帮助开发者高效地操作数据库。它不仅简化了数据库操作,还提供了丰富的功能,如跨表查询、聚合与分组查询、F 和 Q 函数等。通过合理使用这些功能,可以显著提升开发效率和代码的可维护性。
📣 商家广告 :
👍
0
👎
IP地址: 230.198.47.152
搜索次数: 9
提问时间: 2025-11-07 23:07:08
🛒 域名购买 :
23.cx 59.gold wenchangji.cn 81.biz 80.gs zm.gs xq.gs zhansou.cn chesou.com.cn il.gs
❓️ 热门提问 :
独立站服务器多少钱 站群301跳转沙盒期 机柜 12u 云主机 年费 idc机房95计费举例 域名交易阿里 云电脑 服务器 买个云主机 购买vps自己搭建 弹性云主机是什么 豌豆Ai站群搜索引擎系统
🌐 域名评估 :
yu8.nm.cn uav.bj.cn fggu.cn hhlg.cn q.gs.cn dji.ln.cn evtolfair.cn kfls.cn yu7.hl.cn 46.hk
⛏ 最新挖掘 :
凯里酸汤鱼 贵阳烤脑花 都匀毛尖茶 花溪牛肉粉 贵阳烤生蚝 贵阳烤豆腐 贵阳纸包鱼 贵阳特色菜
🖌 热门作画 :
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊 :
🔗 友情链接 :
网站搜索
Us search engine
ai提问
🧰 站长工具 :Ai工具 whois查询 搜索
📢 温馨提示 :本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持 :本站由豌豆Ai 提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。