ORM
- object:对象
- relations:关系
- mapping:映射
django内置ORM可以将对象和数据库表对应起来不需要使用SQL语句,通过类和对象对数据库进行操作。可以根据设计类生成数据库表。
设计模型类
生成数据库表
django默认配置的数据库是sqlite3
- 生成迁移文件
python manage.py makemigrations
执行上述命令在migrations目录下生成001-initial.py文件
# Generated by Django 3.0.3 on 2020-02-22 07:34
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='BookInfo',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), # 自动生成id主键
('title', models.CharField(max_length=32)),
('pubdate', models.DateField()),
],
),
]
记得在settings.py中添加app否则会报错:No changes detected
- 执行迁移生成表
python manage.py migrate - 进行数据库操作
from goods.models import BookInfo # 引入对应app模型中的模型类
from datetime import date
b = BookInfo() # 创建一个实例对象
b.pubdate = date(2020, 2, 2) # 修改实例属性,属性名要和模型类中一致
b.title = '冠状病毒'
b.save() # 提交更改,数据库表中会增加一条信息
b.title = '口罩'
b.save() # 保存修改
# 查询信息
b1 = BookInfo.objects.get(id = 1) # 输入查询条件
b1.title # 显示查询内容
b1.delete() # 删除数据
建立表间关系
# 建立表间关系
# 英雄人物类
class HeroInfo(models.Model):
# 姓名
hname = models.CharField(max_length=32)
# 性别,性别为布尔型,默认值是False,代表男
hgender = models.BooleanField(default=False)
# 备注
hcomment = models.CharField(max_length=128)
# 建立和BookInfo之间的关系,设置外键
hbook = models.ForeignKey('BookInfo', on_delete=models.CASCADE) # 输入要关联模型类的类名
在django2.0后,定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错:
TypeError: init() missing 1 required positional argument: ‘on_delete’
on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选择的值
CASCADE:此值设置,是级联