模型类

ORM

django中内嵌了ORM框架,ORM框架可以将类和数据表进行对应起来,只需要通过类和对象就可以对数据表进行操作。

在Django中主要是设计类:模型类。

ORM另外一个作用:根据设计的类生成数据库中的表。

模型类设计

在应用models.py中设计模型类。

必须继承与models.Model类。

1)     设计BookInfo类。

2)     设计HeroInfo类。

 from django.db import models

 # Create your models here.

 # 图书类
class BookInfo(models.Model):
"""图书模型类"""
# 图书名称 CharField是字符串类型,max_length制定字符串最大长度
btitle = models.CharField(max_length=20)
# 出版日期,DateField是一个日期类型
bpub_date = models.DateField() def __str__(self):
# 如果想在admin里看到图书名称 则要重写__str__方法
return self.btitle class HeroInfo(models.Model):
"""英雄人物模型类"""
# 英雄名称
hname = models.CharField(max_length=20)
# 性别, BooleanField说明是bool类型,default制定默认值,False代表男
hgender = models.BooleanField(default=False)
# 备注
hcomment = models.CharField(max_length=128)
# 关系属性 hbook,建立图书类和英雄人物类的一对多关系
# 关系属性对应的表的字段名格式:关系属性名_id
hbook = models.ForeignKey('BookInfo') def __str__(self):
return self.hname

Models.ForeignKey可以建立两个模型类之间一对多的关系,django在生成表的时候,就会在多端的表中创建一列作为外键,建立两个表之间一对多的关系。

模型类生成表

1)  生成迁移文件

命令:python manage.py makemigrations

迁移文件是根据模型类生成的。

2)  执行迁移生成表

命令:python mange.py migrate

根据迁移文件生成表。

生成表名的默认格式:

应用名_模型类名小写

通过模型类操作数据表

进入项目shell的命令:

python manage.py shell

以下为在相互shell终端中演示的例子:

首先导入模型类:

from booktest.models import BookInfo,HeroInfo

1) booktest_bookinfo表中插入一条数据。

b = BookInfo() #定义一个BookInfo类的对象

b.btitle ='天龙八部' #定义b对象的属性并赋值

b.bpub_date = date(1990,10,11)

b.save() #才会将数据保存进数据库

2) 查询出booktest_bookinfo表中id1的数据。

b = BookInfo.objects.get(id=1)

3) 在上一步的基础上改变b对应图书的出版日期。

b.bpub_date = date(1989,10,21)

b.save() #才会更新表格中的数据

4) 紧接上一步,删除b对应的图书的数据。

b.delete() #才会删除

5) booktest_heroInfo表中插入一条数据。

h = HeroInfo()

h.hname = '郭靖'
       h.hgender = False

h.hcomment
= ‘降龙十八掌’

b2
= BookInfo.objects.get(id=2)

h.hbook
= b2  #给关系属性赋值,英雄对象所属的图书对象

h.save()

6)
查询图书表里面的所有内容。

BookInfo.objects.all()

HeroInfo.objects.all()

关联操作

1) 查询出id为2的图书中所有英雄人物的信息。

b
= BookInfo.objects.get(id=2)

b.heroinfo_set.all()
#查询出b图书中所有英雄人物的信息

最新文章

  1. C++ 知道虚函数表的存在
  2. [PHP]swoole_server几个进程的分工
  3. 居于集成了adt的Android 开发环境配置
  4. poj2777 线段树
  5. Jenkins学习——Jenkins是什么
  6. Gitlab_ansible_jenkins三剑客⑤jenkins Pipeline-job的使用
  7. Mac_Sublime Text3(mac)一些插件和快捷键
  8. Linux记录-告警脚本
  9. Ansible系列(五):各种变量定义方式和变量引用
  10. [pat]1007 Maximum Subsequence Sum
  11. 第22章:MongoDB-聚合操作--聚合管道--$out
  12. LINUX-vmstat命令讲解
  13. JS字符串补全方法padStart()和padEnd()
  14. TryUpdateModel方法 模型绑定
  15. Spring@PostConstruct注解和构造方法的调用顺序
  16. Java中 方法的多态 简析图
  17. Spark2.0机器学习系列之5:随机森林
  18. NOIP2017金秋冲刺训练营杯联赛模拟大奖赛第一轮Day2题解
  19. 用ByteArrayOutputStream解决IO流乱码问题
  20. UVA 11440 Help Tomisu

热门文章

  1. 学习数据结构Day2
  2. Linux08 文件系统
  3. pyenv基本使用
  4. CMDB和自动化运维
  5. Log4J对系统性能的影响
  6. maven打包spring boot项目及跳过test文件
  7. JavaScript是单线程还是多线程(转)
  8. Spring Boot(二)
  9. charles4.0 request和response的显示设置
  10. Python接口自动化基础---post请求