Django模型类操作数据表
1、创建项目
django-admin startproject my_first_django # 创建一个名称为my_first_django的项目
命令执行后会产生一个项目名称的文件夹和一个manage.py 文件
manage.py是项目的管理文件。
my_first_django中的结构如下:
Django 开发中一个功能模块用一个应用来实现
2、创建一个应用
python manage.py startapp booktest # 创建一个booktest的应用
应用创建好了以后需要进行注册
修改my_first_django中的setting.py 文件中的INSTALLED_APPS配置项。
运行django的web服务
python manage.py runserver
ORM (Object-Relations-Mapping)简介 ,Django默认内置了ORM框架
3、创建一个图书模型
from django.db import models# Create your models here.# 设计和表对应的类 : 模型类# 图书类
class BookInfo(models.Model):"""图书模型类"""bname = models.CharField(max_length=20)bpub_data = models.DateField()
Django会根据模型类在数据库中创建对应的表
模型类生成表分为两步:
1)生成迁移文件
python manage.py makemigrations
2)执行迁移生成表
python manage.py migrate
数据库中创建的的表名称格式为:应用名_模型类的小写
本实例中的表明为 "booktest_bookinfo"
4、通过模型类操作数据表(增删改查)
1)增加记录
from booktest.models import BookInfo
from datetime import date# 数据库中增加记录
# 1 实例化模型类
# 2 添加实例属性 实例属性的名称需要了模型类中的类属性名称一致
# 3 实例调用save()方法完成记录的插入
b = BookInfo()
b.bname = "天龙八部"
b.bpub_data = data(1990,1,1)
b.save()
2)查询记录
from booktest.models import BookInfo# 查询记录的步骤:
# 1 调用模型类的objects.get()方法 参数为查询条件
# 2 接收1中的返回的结果,类型了模型类的一个实例
# 3 查看 2 中实例的属性即可b2 = BookInfo.objects.get(bname="天龙八部")
print(b2.bname)
print(b2.bpub_data)
(3) 修改记录
from booktest.models import BookInfo# 修改记录的步骤:
# 1 先查询到要修改的记录,得到其实例
# 2 对其实例属性进行修改
# 3 调用save()方法b3 = BookInfo.objects.get(bname="天龙八部")
b3.bname = "天龙八部2"
b3.save()
4) 删除记录
from booktest.models import BookInfo# 修改记录的步骤:
# 1 先查询到要修改的记录,得到其实例
# 2 调用该实例的delete()方法b4 = BookInfo.objects.get(bname="天龙八部2")
b4.delete()
5、添加一对多关系
描述:添加一个英雄类,英雄有姓名,性别,大招和出自的书籍属性,其中出自的书籍是图书表的外键。图书表和英雄表是一对多的关系。
1)创建英雄模型类
from django.db import models# Create your models here.# 设计和表对应的类 : 模型类# 图书类
class BookInfo(models.Model):"""图书模型类"""bname = models.CharField(max_length=20)bpub_data = models.DateField()# 英雄类
class HeroInfo(models.Model):"""英雄模型类"""h_name = models.CharField(max_length=20)h_gender = models.BooleanField(default=False)h_comment = models.CharField(max_length=128)h_book = models.ForeignKey("BookInfo", on_delete=models.CASCADE)
其中models.ForeignKey("BookInfo", on_delete=models.CASCADE),第一个参数为“一”对“多”中的“一”的类名,第二个参数是在删除“一”的时候对“多”的处理方式。models.CASCADE表示在删除“一”时,对“多”采取对应的删除(级联删除)。
on_delete的可取值有以下:
CASCADE
:这就是默认的选项,级联删除,你无需显性指定它。PROTECT
: 保护模式,如果采用该选项,删除的时候,会抛出ProtectedError
错误。SET_NULL
: 置空模式,删除的时候,外键字段被设置为空,前提就是blank=True, null=True
,定义该字段的时候,允许为空。SET_DEFAULT
: 置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。SET()
: 自定义一个值,该值当然只能是对应的实体了
2)更新并执行迁移文件(参照3.1和3.2)
3)添加英雄记录
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_first_django.settings") # my_first_django 项目名称
django.setup()from booktest.models import BookInfo, HeroInfo
from datetime import dateb1 = BookInfo()
b1.bname = "天龙八部"
b1.bpub_data = date(1989, 10, 5)
b1.save()b2 = BookInfo()
b2.bname = "神雕侠侣"
b2.bpub_data = date(1999, 1, 20)
b2.save()h1 = HeroInfo()
h1.h_name = "乔峰"
h1.h_gender = False
h1.h_comment = "降龙十八掌"
# 注意 在添加英雄的h_book属性时类型为 BookInfo的实例
h1.h_book = b1
h1.save()h2 = HeroInfo()
h2.h_name = "段誉"
h2.h_gender = False
h2.h_comment = "六脉神剑"
h2.h_book = b1
h2.save()h3 = HeroInfo()
h3.h_name = "杨过"
h3.h_gender = False
h3.h_comment = "独臂神功"
h3.h_book = b2
h3.save()h3 = HeroInfo()
h3.h_name = "小龙女"
h3.h_gender = True
h3.h_comment = "睡树枝"
h3.h_book = b2
h3.save()
在booktest_heroinfo表中有h_book_id字段,这个字段和类属性中的h_book对应
4)查看英雄的book属性
hero = HeroInfo.objects.get(h_name="小龙女")
print(hero.h_name)
print(hero.h_gender)
print(hero.h_book)
print(hero.h_book.bname)
print(hero.h_book_id)
5)查看某一书名对应的所有英雄
# 查询书籍的对象b1 = BookInfo.objects.get(bname="天龙八部")
print(b1.bname)# 查询书籍对应的所有英雄 使用 b1.heroinfo_set.all() 返回的是一个列表,里面存放的是每个英雄的实例for hero in b1.heroinfo_set.all():print(hero.h_name)print(hero.h_comment)print()
6)查询表里的所有内容
# 返回一个列表,列表里面是每本书的实例
BookInfo.objects.all()
Django模型类操作数据表相关推荐
- Django模型类与后台管理
文章目录 模型类 模型类设计 生成迁移文件 执行迁移生成表 通过模型类操作数据表 后台管理 1.本地化 2.创建管理员 3. 管理员登陆网址 4.注册模型类 5.自定义表单 模型类 模型类设计 在应用 ...
- Django框架(3.django设计模型类、模型类生成表、ORM框架简介)
ORM框架简介 O是object,也就类对象的意思, R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思, M是mapping,是映射的意思.在ORM框架中,它帮我们把类和数据表进 ...
- django-关联查询-通过模型类跨表关联查询
名词的约定 一对多关系中,一方对应的类叫做一类,多方对应的类叫做多类 多类中定义的属性,叫做关联属性 本节例子 图书类 BookInfo 英雄类 HeroInfo 利用模型类联表查询 需要一方的结果, ...
- 第四章:Django 模型 —— 设计系统表
1. Django框架提供了完善的模型(Model )层来创建和存储数据,每一个模型对应数据库中的唯一的一张表. 2. Django 模型基础知识: .每一本模型是一个Python类,继承了djang ...
- Django模型层--多表操作
三种表关系:一对一.一对多.多对多. 一.创建模型 OneToOneField() 一对一 ForeignKey() 一对多 多对一 ManyToManyField() 多对多 #添加外键 一对多 多 ...
- 第十章:django模型类(二)
系列文章目录 第一章 :Django安装与配置虚拟环境 第二章:django各模块的作用以及参数说明 第三章: Django的路由与视图 第四章:django请求 第五章:django会话 第六章: ...
- django模型的连表查询
在数据库当中,可以通过设置外键的方式将两个表进行连接,如果需要查询数据的时候就需要进行连表查询. 例如:假如我现在有两张表.userinfo 和 usertype,userinfo里面记录了用户的信息 ...
- django 模型类的常见字段约束,以及filter 过滤和查询
null 不设置时默认设置为False.设置为True时,数据库表字段中将存入NULL的记录. null和blank组合使用,null=True,blank=True,表示该字段可以为空 blank ...
- 5.Django|模型层--多表关系
多表操作 文件为 ----> orm2 数据库表关系之关联字段与外键约束 一对多Bookid title price publish email addr1 php 100 人民出版社 111 ...
最新文章
- mysql行级锁测试
- 【AndroidStudio】关于SVN的相关配置简介
- html 鼠标移动3d视图,HTML5 鼠标悬停3D平面摇晃动效
- android 控件覆盖关系,安卓子控件抢占父控件点击事件或者焦点问题
- Qt学习之Qt基础入门(下)
- Vscode使用npm安装babel
- spark任务shell运行_Spark原理与实战(七)部署模式与运行机制
- 网页后门危害大 网站安全狗帮助查杀
- 上传Excel到HBase数据库(POI、poi-ooxml)
- Opencv图像处理(全)
- windows常用指令大全
- 网页磁贴模板_文本磁贴(登录)模板 (HTML)
- 信号完整性与电源完整性分析 第三版 pdf_信号完整性揭秘于博士SI设计手记高清PDF分享...
- 程序员找工作,写简历/面试/谈工资都要注意哪些事?
- 利用NEO与Unity制作游戏(第1部分)
- Doris入门到精通-阶段一(简介安装使用)
- 区块链三加一:200个ETH在imToken上怎么没的?
- table 表格合并行或列
- gpu虚拟化云服务器,gpu云服务器 虚拟化
- finally关键字
热门文章
- mtk 实际电池测试存在一些电量跳变问题,对一些由于电池特性引起的跳变
- jquery中获取复选框的值
- HTML5期末大作业:电影影视网站设计——电影介绍(11页) 学生HTML个人网页作业作品下载 个人电影影视网页设计制作 大学生个人电影影视网站作业模板 简单个人电影影视
- 数据仓库项目管理面试题整理
- 《PyInstaller打包实战指南》制作软件安装包
- mermaid(markdown)语法
- BOSS系统概念简介
- Linux中搭建Redis集群及redis集群配置常见问题总结
- 偷个懒,公号抠腚早报80%自动化——2.手撕爬虫定时爬新闻
- SpringMVC和SSM整合步骤(最详细)