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、根据模型类生成表
  • 生成迁移文件,迁移文件是根据模型类生成的, 使用命令 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()

03-Django模型类的更多相关文章

  1. Django模型类Meta元数据详解

    转自:https://my.oschina.net/liuyuantao/blog/751337 简介 使用内部的class Meta 定义模型的元数据,例如: from django.db impo ...

  2. 7.Django模型类的定义和管理

    Django的模型类是给ORM层服务的 1.每个数据模型都是django.db.models.Model的子类. 2.它的父类Model包含了所有必要的和数据库交互的方法,并提供了定义数据库字段的语法 ...

  3. django模型类

    模型类 ORM django中内嵌了ORM框架,ORM框架可以将类和数据表进行对应起来,只需要通过类和对象就可以对数据表进行操作. 在Django中主要是设计类:模型类. ORM另外一个作用:根据设计 ...

  4. Django(十)模型:django模型类对数据库的:增/删/改/查、自关联、管理器、元选项(指定表名)

    一.插入.更新和删除 调用一个模型类对象的save方法的时候就可以实现对模型类对应数据表的插入和更新. 调用一个模型类对象的delete方法的时候就可以实现对模型类对应数据表数据的删除. 二.自关联 ...

  5. 03 Django模型层: 常用(非常用)字段和参数

    Django模型层: 常用(非常用)字段和参数 1 ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为i ...

  6. Django | 模型类变更后生成迁移文件,报错:You are trying to add a non-nullable field 'BookName' to BookInfo without a default....

    报错: You are trying to add a non-nullable field 'BookName' to BookInfo without a default; we can't do ...

  7. django 模型类的常见字段约束,以及filter 过滤和查询

    null 不设置时默认设置为False.设置为True时,数据库表字段中将存入NULL的记录. null和blank组合使用,null=True,blank=True,表示该字段可以为空 blank ...

  8. Django模型类之models字段类型和参数以及元数据meta

    models之字段类型和参数 示例: # class Test(models.Model): # courses_test # """测试学习用""& ...

  9. 8.Django模型类例子

    这里定义4个模型 作者:一个作者有姓名 作者详情:包括性别,email,出生日期, 出版商:名称,地址,城市,省,国家,网站 书籍:名称,日期 分析: 作者详情和作者一对一的关系 一本书可以有多个作者 ...

  10. Django模型层Meta内部类详解

    Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.以下对此作一总结: abstract      这个属性是定义当前的模型类是不是一个抽象类.所谓抽象类是不会对应 ...

随机推荐

  1. 【docker学习二】CentOS7.5+Docker 镜像(容器)的使用

    承接上篇:https://mp.csdn.net/postedit/82744127 上文介绍了容器与镜像的基本操作,这里总结下容器的使用. 先在官网找到一个镜像: https://hub.docke ...

  2. django启动入口源码分析

    manage.py是启动入口,在里面调用execute_from_command_line(sys.argv)方法 def execute_from_command_line(argv=None): ...

  3. c#基础四

    写入一个XML文件 using System; using System.Collections.Generic; using System.Linq; using System.Text; usin ...

  4. 提升——树形DP

    这里讲提高一点的内容,所以没有树形DP基础的,先看一下基础部分: 浅说——树形DP 闲言不表,看第一题. 这道题是典型的树上最长链问题.(就是一个模板题) 给定一棵树,树上共有N个节点(N<=5 ...

  5. 带你全面了解高级 Java 面试中需要掌握的 JVM 知识点

    目录 JVM 内存划分与内存溢出异常 垃圾回收算法与收集器 虚拟机中的类加载机制 Java 内存模型与线程 虚拟机性能监控与故障处理工具 参考 带你全面了解高级 Java 面试中需要掌握的 JVM 知 ...

  6. 按行读取String类型

    BufferedReader br = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(content.getByt ...

  7. 在vue项目中遇到关于对象的深浅拷贝问题

    一.问题 项目里新添加了一个多选的功能,其显示的数据都是从后端返回过来的,我们需要在返回来的数据外再额外添加一个是否选中的标记,我的选择是在返回正确的数据时将标记添加进去,然后push到数组中.然后就 ...

  8. 使用Gitlab-CI 实现NetCore项目Docker化并部署到阿里云K8S

    使用Gitlab-CI 实现NetCore项目Docker化并部署到阿里云K8S 先行条件: 1.了解NetCore项目基础命令,如dotnet publish   等几个常用命令. 2.了解Dock ...

  9. JAVA面试题 手写ArrayList的实现,在笔试中过关斩将?

    面试官Q1:可以手写一个ArrayList的简单实现吗? 我们都知道ArrayList是基于数组实现,如果让你实现JDK源码ArrayList中add().remove().get()方法,你知道如何 ...

  10. nu.xom:Attribute

    Attribute: 机翻 Attribute copy():生成一份当前Attribute的拷贝,但是它没有依附任何Element Node getChild(int position) :因为At ...