ORM框架:对象-关系-映射
将面向对象语言程序中的对象自动持久化到关系数据库中。本质就是将数据从一种形式转换到另外一种形式
O表示Object 对象类
R表示Relations 关系,关系数据库中的表
M表示Mapping 映射,它的作用就是建立O和R之间的联系
通过类和对象操作数据库表,不需要写sql语句
在Django中已经内置了ORM框架,这个框架将类和数据表进行对应起来,只需通过类和对象就可以对数据表进行操作,也可以通过设计的模型类生成数据库中的表
模型类
1. 设计模型类
from django.db import models
# Create your models here.
class BookInfo ( models.Modeles ):
"""
图书模型类
1.图书名称,CharField 说明是一个字符串,max_length字符串的最大长度,与数据库表对应
2.出版日期,DateField是一个日期类型
数据里表里还有一个主键id,id在Django里会自动生成,不需要定义
"""
btitle = models.CharField ( max_length=20 )
bpub_date = models.DateField ()
2、根据模型类生成表
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()