Django模型
通过继承 Model类
创建模型
from django.db import models
class ModelName(models.Model):
pass
Django中
- 一个
Model类
代表一个数据表 - 一个
Model类实例
代表数据表一条记录
模型字段
假设存在数据表 Blog
class Blog(models.Model):
...
pass
方法(必要参数) | 对应数据类型 | 例子 |
---|---|---|
CharField(max_length=n ) |
VARCHAR(n ) |
models.CharField(50) |
TextField() | TEXT | models.TextField() |
DateField() | DATE | models.DateField() |
IntegerField() | INT | models.IntegerField() |
ForeignKey(Model) | 外键 | models.ForeignKey(Blog) |
ManyToManyField() | 数据表之间建立多对多关系 | models.ManyToManyField(Blog) |
EmailField() | VARCHAR(254) | models.EmailField() |
操作数据表
Django使用 Manager类 来提供数据库操作的接口,当你继承 Model类
创建一个模型后,将可以通过 Model.objects
来使用 Manager类提供的接口
例如:
class MyModel(models.Model):
...
pass
# 使用Manager类提供的all()方法来获取MyModel模型的所有记录
MyModel.objects.all()
假设数据库中有以下表
class Information(models.Model):
''' 个人信息表 '''
name = models.CharField(max_length=50)
age = models.IntegerField()
+--------+------+
| name | age |
+--------+------+
| 杜甫 | 20 |
| 鲁迅 | 50 |
| 李白 | 50 |
+--------+------+
操作-增
# 方法1
# 创建一条记录(实例化时插入数据)
info_1 = Information(name='狗蛋', age=18)
# 将记录写入数据表
info_1.save()
# 方法2
# 创建一条空记录(实例化后通过属性插入数据)
info_1 = Information()
# 通过属性方式添加数据
info_1.name = '狗蛋'
ingo_1.age = 18
# 数据写入数据表
info_1.save()
# 方法3
# 使用 create() 创建的记录直接写入到数据表,无需再调用 save() 手动保存
Information.objects.create(name='狗蛋', age=18)
+--------+------+
| name | age |
+--------+------+
| 杜甫 | 20 |
| 鲁迅 | 50 |
| 李白 | 50 |
| 狗蛋 | 18 |
+--------+------+
操作-查
# 获取字段name为杜甫的记录,注意:get()一次只能获取一条记录,
# 当数据表中有多条记录符合条件时抛出DoesNotExist异常
information.objects.get(name='杜甫')
# 使用多个条件检索数据,获取字段name=鲁迅,age=50的记录
information.objects.get(name='鲁迅', age=50)
# 一次查找符合条件的多条记录, 以下返回age在50的作者(鲁迅、李白)的记录
information.objects.filter(age=50)
# 根据排除条件检索记录, 以下返回年age不是50的作者(杜甫、狗蛋)的记录
information.objects.exclude(age=50)
# 检索数据表所有记录
information.objects.all()
操作-删
根据以上操作可以推断出删除记录的接口为 information.objects.delete()
,但现实是Django为了防止information.objects.delete()
误删清空数据表所有数据,删除操作要在记录级别上使用,换句话说,没有 information.objects.delete()
接口,要删除记录,您要先检索数据再删除。
# 错误使用方法,删除数据表中名字为李白的作者的记录
information.objects.delete(name='李白')
# 以下是正确使用方法
# 删除数据表中名字为李白的作者的记录
information.objects.get(name='李白').delete()
# 或者
author_lb = information.objects.get(name='李白')
author_lb.delete()
# 删除多条记录,从数据表删除所有年龄为50的作者的记录(鲁迅、李白)
information.objects.filter(age=50).delete()
# 或者
author_list = information.objects.filter(age=50)
author_list.delete()
操作-改
修改记录可以先检索数据,修改后调用 save() 保存
# 修改作者狗蛋年龄为17岁
author_gd = information.objects.get(name='狗蛋')
author_gd.age = 17
author_gd.save()
网友评论