04-模型类

ORM框架:对象-关系-映射

将面向对象语言程序中的对象自动持久化到关系数据库中。本质就是将数据从一种形式转换到另外一种形式
O表示Object 对象类
R表示Relations 关系,关系数据库中的表
M表示Mapping 映射,它的作用就是建立O和R之间的联系
通过类和对象操作数据库表,不需要写sql语句
在Django中已经内置了ORM框架,这个框架将类和数据表进行对应起来,只需通过类和对象就可以对数据表进行操作,也可以通过设计的模型类生成数据库中的表

模型类

1. 设计模型类

在models.py中写,必须继承models.Model

from django.db import models

# Create your models here.

class BookInfo ( models.Modele ): """ 图书模型类 1.图书名称,CharField 说明是一个字符串,max_length字符串的最大长度,与数据库表对应 2.出版日期,DateField是一个日期类型 数据里表里还有一个主键id,id在Django里会自动生成,不需要定义 """ btitle = models.CharField ( max_length=20 ) bpub_date = models.DateField () 
2、根据模型类生成表
  • 生成迁移文件,迁移文件是根据模型类生成的, 使用命令 python  manage.py makemigrations

  • 执行迁移文件生成表,使用命令 python  manage.py migrate

Django项目默认使用的数据库是sqlite3,可以在settings里看到,在项目下会生成一个db.sqlite3,如何打开?

1)安装
   sudo  apt-get  install sqliteman

2)输入命令sqliteman 回车就会打开 3)File--open,选择db.sqlite3文件打开

根据模型类生成的表,表名是应用名_模型类名小写

3、根据模型类操作数据库表的增删改查

进入项目的shell环境
命令:python  manage.py shell

  • 向表里插入数据

from booktest.models import BooKInfo # 应用名 类名
b=BookInfo() # 定义一个BookInfo类对象
b.btitle='红楼梦' # 定义b对象的属性并赋值
from datetime import date
b.bpub_date = date(1990,1,1) # 定义出版日期
b.save()

  • 查表里的数据

b2=BookInfo.objects.get(id=1)
type(b2)
b2.btitle # 回车显示 红楼梦

  • 更新数据库表

b2.bpub_date=date(1990,10,10)
b2.save()

  • 删除数据

b2.delete()

4、模型类关系和关系查询

(多表之间有关联)

# 人物类
# 人物名 hname
# 性别 hgender # 年龄 hage # 关系属性 hbook 建立图书类与人物类之间的一对多的关系 的属性 class HeroInfo(models.Models): hname=models.CharField(max_length=20) # default 指定默认值,False代表男 hgender=models.BooleanFiled(defalut=False) hbook=models.ForeignKey('BookInfo') # 建立两表之间的关联 

-->生成迁移文件-->根据迁移文件生成表,hbook在生成的表后,表里的字段对应为hbook_id,固定格式:关系属性名_id
-->插入数据

from booktest.models import BooKInfo,HeroInfo
b = BookInfo()
b.btitle='红楼梦'
from datetime import date
b.bpub_date = date(1990,1,1)
b.save()
h = HeroInfo()
h.hname='林黛玉'
h.hgender=True
h.hbook_id = b # 指定book表里的主键id
h.save()
h2=HeroInfo() # 在增加一条数据
h2.hname='贾宝玉'
h2.hbook=b
h2.save()

根据图书表对象查询图书关联的人物信息

b.heroinfo_set.all()

查询表里的所有内容

HeroInfo.objects.all()

猜你喜欢

转载自www.cnblogs.com/wysk/p/11295684.html