一、关于django生成的文件
其中face_django中的文件和manage.py是自动生成的;booktest是手动进行创建的。
二、ORM框架
就是我们写一个类,然后可以自动建表
O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思。在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据。ORM框架还有一个功能,它可以根据我们设计的类自动帮我们生成数据库中的表格,省去了我们自己建表的过程。
使用django进行数据库开发的步骤如下:
1.在models.py中定义模型类
2.迁移
3.通过类和对象完成数据增删改查操作
1.首先先写BookInfo类:书名、时间
from django.db import models
class BookInfo(models.Model):
bTitle=models.CharField(max_length=20)
bpub_data=models.DateField()
2.对写的类进行迁移操作,生成数据表
1).生成迁移文件:根据模型类生成创建表的迁移文件。
python C:\Users\DELL\face__django\manage.py makemigrations
2).执行迁移:根据第一步生成的迁移文件在数据库中创建表。
python C:\Users\DELL\face__django\manage.py migrate
其中id是自动生成的。
此时已完成数据表的自动创建
3.再写一个类,做两个类的关联
class HeroInfo(models.Model):
hname=models.CharField(max_length=20)
hgender=models.BooleanField(default=False)
htext=models.CharField(max_length=100)
# 让BookInfo类和HeroInfo类之间建立了一对多的关系。
bid=models.ForeignKey('BookInfo',on_delete=models.CASCADE)
django 升级到2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常: TypeError: init()
missing 1 required positional argument: ‘on_delete’on_delete各个参数的含义如下:
on_delete=None, # 删除关联表中的数据时,当前表与其关联的field的行为 on_delete=models.CASCADE, # 删除关联数据,与之关联也删除 on_delete=models.DO_NOTHING, # 删除关联数据,什么也不做 on_delete=models.PROTECT, # 删除关联数据,引发错误ProtectedError # models.ForeignKey('关联表', on_delete=models.SET_NULL, blank=True, null=True) on_delete=models.SET_NULL, # 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空,一对一同理) # models.ForeignKey('关联表', on_delete=models.SET_DEFAULT, default='默认值') on_delete=models.SET_DEFAULT, # 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值,一对一同理) on_delete=models.SET, # 删除关联数据, a. 与之关联的值设置为指定值,设置:models.SET(值) b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
由于多对多(ManyToManyField)没有 on_delete
参数,所以以上只针对外键(ForeignKey)和一对一(OneToOneField)
4.由于又写了一个类,因此需要再次进行迁移操作,生成英雄对应的表,即0002_heroinfo.py
1).生成迁移文件:根据模型类生成创建表的迁移文件。
python C:\Users\DELL\face__django\manage.py makemigrations
2).执行迁移:根据第一步生成的迁移文件在数据库中创建表。
python C:\Users\DELL\face__django\manage.py migrate
三、针对数据进行的操作
在pycharm命令行输入
python C:\Users\DELL\face__django\manage.py shell
1.查询
BookInfo.objects.all()
<QuerySet []>
2.插入数据
from models import BookInfo,HeroInfo
b=BookInfo()
b.bTitle="射雕"
from datetime import date
b.bpub_data=date(1998,9,9)
b.save()
3.再次查询
BookInfo.objects.all()
<QuerySet [<BookInfo: BookInfo object (1)>]>
4.修改数据
b.bTitle="护栏"
b.save()
5.再次查询
b=BookInfo.objects.get(id=1)
b.btitle
返回:‘护栏’
6.删除
b.delete()
7.关联操作
对HeroInfo添加数据
H=HeroInfo()
H.hname="黄蓉"
H.htext="sahdjsad"
h.bid=b
对BookInfo添加数据
b=BookInfo()
b.btitle='abc'
b.bpub_date=date(2017,1,1)
b.save()
查询关联数据(heroinfo_set 必须小写)
返回当前book对象的所有hero。
b.heroinfo_set.all()