Django-Model数据库操作详解:增删改查与连表
需积分: 12 182 浏览量
更新于2024-08-30
收藏 649KB PDF 举报
"这篇文档详细介绍了Django框架中如何使用Model进行数据库操作,包括增删改查和连表结构的应用。主要关注点在于Django Model的设计和不同类型的字段定义。"
在Django中,数据库操作主要通过ORM(Object-Relational Mapping)实现,它允许开发者使用Python对象来操作数据库,避免了直接编写SQL语句的复杂性。Model是ORM的核心,它定义了数据库表的结构。
首先,创建Model表的基本结构如下:
```python
from django.db import models
class UserInfo(models.Model):
name = models.CharField(max_length=30)
email = models.EmailField()
memo = models.TextField()
```
这里的`UserInfo`类就是一个Model,它会映射到数据库中的一个表,字段`name`、`email`和`memo`对应表中的列。
接着,我们来看一下Django Model中支持的字段类型:
1. `models.AutoField`: 自增列,通常用于主键,如无指定,默认生成一个名为`id`的自增列。如果要自定义主键,需要设置`primary_key=True`。
2. `models.CharField`: 字符串字段,必须指定`max_length`参数,例如`name`字段。
3. `models.BooleanField`: 布尔类型,对应数据库的tinyint(1),默认不能为空,可以使用`Blank=True`允许为空。
4. `models.CommaSeparatedIntegerField`: 以逗号分隔的数字字段,继承自`CharField`,需要指定`max_length`。
5. `models.DateField`: 日期类型,可以使用`auto_now`和`auto_now_add`参数自动管理时间。
6. `models.DateTimeField`: 日期时间类型,同`DateField`,但包含时间信息。
7. `models.DecimalField`: 十进制小数类型,需指定`max_digits`(整数部分总长度)和`decimal_places`(小数位数)。
8. `models.EmailField`: 邮箱地址类型,内部使用正则表达式验证格式。
9. `models.FloatField`: 浮点类型,对应数据库的double。
10. `models.IntegerField`: 整型,对应数据库的int。
11. `models.BigIntegerField`: 长整型,适用于大整数,如ID或计数器。
此外,Django还提供了`ManyToManyField`和`ForeignKey`等关系字段,用于处理多对多和一对多的关系。例如,如果有用户角色关联,可以这样定义:
```python
class Role(models.Model):
role_name = models.CharField(max_length=30)
class UserRole(models.Model):
user = models.ForeignKey(UserInfo, on_delete=models.CASCADE)
role = models.ForeignKey(Role, on_delete=models.CASCADE)
```
`on_delete=models.CASCADE`表示当Role被删除时,相关联的UserRole也会被删除。
在完成Model定义后,使用`makemigrations`和`migrate`命令创建和应用数据库迁移,即可在数据库中生成相应的表。
执行增删改查操作,可以使用Manager方法,例如`objects.create()`, `objects.get()`, `objects.update()`, `objects.delete()`等。同时,Django提供连表查询功能,通过`annotate()`, `select_related()`, `prefetch_related()`等方法优化性能。
Django的Model层提供了丰富的字段类型和操作方法,使得开发者能够便捷地管理和操作数据库,实现高效的数据处理。
2021-05-15 上传
2019-08-14 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
2020-09-20 上传
2021-10-04 上传
2020-09-18 上传
2024-01-27 上传
weixin_38617001
- 粉丝: 5
- 资源: 902
最新资源
- 新代数控API接口实现CNC数据采集技术解析
- Java版Window任务管理器的设计与实现
- 响应式网页模板及前端源码合集:HTML、CSS、JS与H5
- 可爱贪吃蛇动画特效的Canvas实现教程
- 微信小程序婚礼邀请函教程
- SOCR UCLA WebGis修改:整合世界银行数据
- BUPT计网课程设计:实现具有中继转发功能的DNS服务器
- C# Winform记事本工具开发教程与功能介绍
- 移动端自适应H5网页模板与前端源码包
- Logadm日志管理工具:创建与删除日志条目的详细指南
- 双日记微信小程序开源项目-百度地图集成
- ThreeJS天空盒素材集锦 35+ 优质效果
- 百度地图Java源码深度解析:GoogleDapper中文翻译与应用
- Linux系统调查工具:BashScripts脚本集合
- Kubernetes v1.20 完整二进制安装指南与脚本
- 百度地图开发java源码-KSYMediaPlayerKit_Android库更新与使用说明