1.创建数据库

mysql -uroot -pmysqlcreate database django_demo charset=utf8;

2.配置mysql数据库

在settings.py 中配置数据库连接信息

# 默认数据库信息
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}
}

修改为:

# 以自己创建的数据库为准
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','HOST': '127.0.0.1',  # 数据库主机'PORT': 3306,  # 数据库端口'USER': 'root',  # 数据库用户名'PASSWORD': 'mysql',  # 数据库用户密码'NAME': 'djangodb'  # 数据库名字}
}

修改成功后 ,需要安装MySQL数据库的客户端驱动

安装mysqlclientpip install mysqlclient

3.ORM框架介绍

O是object,也就是类或者对象的意思,这里的类就是模型类
R是relation,也就是关系数据库中数据表的意思
M是mapping,也就是映射的意思
在ORM框架中,它帮我们把模型类和数据表进行了一个映射,可以让我们通过模型类及对象就能操作它所对应的数据表中的数据
ORM框架它还可以根据我们设计的模型类自动帮我们生成数据库中对应的数据表,省去了我们自己建表的过程

作用和优点:
1.只需要 面向对象编程 , 不需要面向数据库编写代码
2.实现了数据模型与数据库的 解耦 , 屏蔽了不同数据库操作上的差异.

4.定义模型了和数据库迁移

模型类被定义在子应用/models.py文件中
模型类必须继承自Model类,位于django.db.models中
创建子应用booktest,并在其models.py文件中定义模型类
class BookInfo(models.Model):# 创建字段,字段类型...btitle = models.CharField(max_length=20, verbose_name='名称')bpub_date = models.DateField(verbose_name='发布日期', null=True)bread = models.IntegerField(default=0, verbose_name='阅读量')bcomment = models.IntegerField(default=0, verbose_name='评论量')is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')class Meta:db_table = 'bookinfo'  # 指明数据库表名verbose_name = '书'  # 在admin站点中显示的名称def __str__(self):"""定义每个数据对象的显示信息"""return self.btitleclass HeroInfo(models.Model):GENDER_CHOISE = ((0, 'male'),(1, 'female'))hname = models.CharField(max_length=20, verbose_name="名字")hgender = models.SmallIntegerField(choices=GENDER_CHOISE, verbose_name="性别")hdesc = models.CharField(max_length=200, null=True, verbose_name="介绍")hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name="评论量")is_delete = models.BooleanField(default=False, verbose_name="逻辑删除")class Meta:db_table = 'heroinfo'verbose_name = '英雄'def __str__(self):return self.hname


了解:关于外键

在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引用表数据如何处理,在django.db.models中包含了可选常量:CASCADE 级联,删除主表数据时连通一起删除外键表中数据PROTECT 保护,通过抛出ProtectedError异常,来阻止删除主表中被外键应用的数据SET_NULL 设置为NULL,仅在该字段null=True允许为null时可用SET_DEFAULT 设置为默认值,仅在该字段设置了默认值时可用SET() 设置为特定值或者调用特定方法DO_NOTHING 不做任何操作,如果数据库前置指明级联性,此选项会抛出IntegrityError异常

5.迁移模型类

# 生成迁移文件python manage.py makemigrations
#同步到数据库中python manage.py migrate

插入数据测试

insert into bookinfo(btitle,bpub_date,bread,bcomment,is_delete) values('射雕英雄传','1980-5-1', 12, 34, 0),('天龙八部','1986-7-24', 36, 40, 0),('笑傲江湖', '1995-12-24', 20, 80, 0),('雪山飞狐', '1987-11-11', 58, 24, 0);insert into heroinfo(hname, hgender, hbook_id, hdesc, is_delete)  values('郭靖', 1, 1, '降龙十八掌', 0),('黄蓉', 0, 1, '打狗棍法', 0),('黄药师', 1, 1, '弹指神通', 0),('欧阳锋', 1, 1, '蛤蟆功', 0),('梅超风', 0, 1, '九阴白骨爪', 0),('乔峰', 1, 2, '降龙十八掌', 0),('段誉', 1, 2, '六脉神剑', 0),('虚竹', 1, 2, '天山六阳掌', 0),('王语嫣', 0, 2, '神仙姐姐', 0),('令狐冲', 1, 3, '独孤九剑', 0),('任盈盈', 0, 3, '弹琴', 0),('岳不群', 1, 3, '华山剑法', 0),('东方不败', 0, 3, '葵花宝典', 0),('胡斐', 1, 4, '胡家刀法', 0),('苗若兰', 0, 4, '黄衣', 0),('程灵素', 0, 4, '医术', 0),('袁紫衣', 0, 4, '六合拳', 0);

6.增删改查

ps:交互测试代码可以在这

6.1 新增

增加数据有两种方式
1.save()
2.create()

使用前要进行导包


from book_test.models import BookInfo,HeroInfo

方式一:save


book =BookInfo()
book.btitle ='西游记'
book.bpub_date='2020-02-02'
book.bread=20
book.bcomment=30
book.save()

方式二:create

BookInfo.object.create(btitle='三国',bpub_date='2020-01-01',bread=100,bcomment=200
)

6.2 修改

修改数据有两种方式
1.save()
2.update

from book_test.models import BookInfo,HeroInfo

方式一:save

#把叫猪八戒的英雄改为猪悟能
hero =HeroInfo.objects.get(hname='猪八戒')
hero.hname='猪悟能'
hero.save()

方式二:update

#把叫沙悟净的英雄改为沙僧
HerInfo.objects.filter(hname='沙悟净').update(hname='沙僧')

6.3删除

删除数据有两种方式
1.模型类对象delete
2.模型类.objects.filter().delete()

方式一:

#删除id为1的英雄
hero=HeroInfo.objects.get(id=1)
hero.delete()

方式二:

#删除id为2的英雄
HeroInfo.objects.filter(id=2).delete()

6.4 查询

1.基本查询
2.过滤查询
3.模糊查询
4.空查询
5.范围查询
6.比较查询
7.日期查询
基本查询:

get 查询单一结果,如果不存在会抛出DoesNotExist异常,如果存在多个结果会报MultipleObjectsReturned异常all 查询多个结果。count 查询结果数量
# 查询所有书
BookInfo.objects.all()#查询id为1的书
BookInfo.objects.get(id=3)#查询书的总数
BookInfo.objects.count()

过滤查询:

filter 过滤出满足条件的多个结果exclude 排除掉符合条件剩下的结果( 取反 )语法:
属性名称__比较运算符=值
# 查询编号为1的图书
BookInfo.objects.filter(id=1)#查询除了编号为1之外的图书
BookInfo.objects.exclude(id=1)

模糊查询:

contains:是否包含
startswith、endswith:以指定值开头或结尾
# 查询书名包含'传'的图书
BookInfo.objects.filter(btitle__contains='传')#查询书名以'部'结尾的图书
BookInfo.objects.filter(btitle__endswith='部')

以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如iexact、icontains、istartswith、iendswith.

空查询:

isnull:是否为null
#查询书名不为空的图书
BookInfo.object.filter(btitle__isnull=False)

范围查询:

in:是否包含在范围内
#查询编号为1或3或5的图书
BookInfo.object.filter(id__in=[1,3,5])

比较查询:

gt 大于 gte 大于等于lt 小于lte 小于等于
#查询编号大于3的图书
BookInfo.objects.filter(id__gt=3)

日期查询:

year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算。
# 查询1980年发表的图书
BookInfo.objects.filter(bpub_date__year=1980)#查询1980年1月1日后发表的图书。
BookInfo.objects.filter(bpub_date__gt=date(1990,1,1))

7.F和Q对象使用

F对象

F对象 两个属性进行比较
F(属性名)

使用时需要进行导包

from django.db.models import F,Q
#查询阅读量大于等于评论量的图书
BookInfo.objects.filter(bread__gte=F('bcomment'))#查询阅读量大于2倍评论量的图书
BookInfo.objects.filter(bread_gt=F('bcomment')*2)

Q对象

Q对象 多个过滤器逐个调用表示逻辑与关系
实现 not and or
not  ~
and &
or |
Q(属性名__运算符=值)
#查询阅读量大于20,并且编号小于3的图书
BookInfo.objects.filter(bread__gt=20,id__lt=3)
或
BookInfo.objects.filter(bread__gt=20).filter(id__lt=3)

使用时需要进行导包

from django.db.models import F,Q
#查询阅读量大于20,或编号小于3的图书
BookInfo.object.filter(Q(bread_gt=20) | Q(id__it=3))

Q对象前可以使用~操作符,表示非not。

#查询编号不等于3的图书
BookInfo.object.filter(~Q(id=3))

004--Django(定义模型类、数据的增删改查、F和Q对象)相关推荐

  1. 创建Dao接口,用impl类实现对数据的增删改查

    大家在JAVA的学习过程中都知道DAO是一个为数据库或其他持久化机制提供了抽象接口的对象,在不暴露数据库实现细节的前提下提供了各种数据操作,然后在impl类中实现对DAO的具体操作. 放一个经典的DA ...

  2. Django 操作Mysql数据库 对表进行增删改查

    为什么80%的码农都做不了架构师?>>>    首先说明:以下方法都是根据表已有的字段添加数据,若想新增字段,则需在类里面新建静态字段, 可参考Django 操作数据库建表  ,增删 ...

  3. Vue+ElementUI纯前端技术实现对表格数据的增删改查

    Vue+ElementUI纯前端技术实现对表格数据的增删改查 页面展示效果 一.页面结构 分为三个部分 head body 以及script 一般我个人是在head中引入一些组件库 , 还有一些样式 ...

  4. Redis概述_使用命令对redis的数据进行增删改查_Jedis连接redis进行数据操作_redis进行数据缓存案例

    学习目标 redis 概念 下载安装 命令操作 1. 数据结构 持久化操作 使用Java客户端操作redis Redis 前言(从百度上抄的, 看看了解一下, 懒得排版了) 1. 概念: redis是 ...

  5. 从零开始的VUE项目-03(数据的增删改查)

    代码svn地址 (用户名:liu,密码;123) 这一篇中,我们要实现的基本就是这么个东西 这个页面就是我们创建的DataManagement.vue页面,我们的主要代码将写在这里面,这个表格我们将用 ...

  6. JDBC——商品品牌数据的增删改查操作

    JDBC练习--完成商品品牌数据的增删改查操作 一.准备环境 1.数据库表tb_brand 2.实体类Brand /*** 品牌* alt+鼠标左键,整列编辑* 在实体类中,基本数据类型建议使用其对应 ...

  7. JDBC练习-完成商品品牌数据的增删改查操作

    准备环境 数据库表tb_brand -- 删除tb_brand表 drop table if exists tb_brand; -- 创建tb_brand表 create table tb_brand ...

  8. Java操作Mongodb数据(增删改查聚合查询)

    文章目录 一.Java操作MongoDB 二.使用步骤 1.基础配置 2.实体类 3.MongoDB表数据 3.增删改查聚合查询 总结 一.Java操作MongoDB 上一篇文章介绍了,如何在本地使用 ...

  9. Node+Vue实现对数据的增删改查

      这是一个用于学生签到的小例子.主要用到的技术有node和Vue:用node搭建小型服务器,配置好路由,前端用vue写好组件,数据库采用的是mysql. 文件结构如下:   主要是功能是对数据的增删 ...

  10. JavaWeb小项目(二)- 完成品牌数据的增删改查(JSP/MVC/三层架构综合应用)

    JavaWeb小项目(二)- 完成品牌数据的增删改查(JSP/MVC/三层架构综合应用) 文章目录 JavaWeb小项目(二)- 完成品牌数据的增删改查(JSP/MVC/三层架构综合应用) 环境搭建 ...

最新文章

  1. squid日志文件太大,怎样处理?
  2. 赛灵思:人工智能芯片发展方向与误区
  3. Linux010 Miniconda安装及使用
  4. SG 复习全部 (全部SG 总览)
  5. 把项目发到github
  6. 分布式版本控制工具:git与Mercurial(zz)
  7. Exchange 2013学习(二),关于约会、会议和事件
  8. 用MODELLER构建好模型后对loop区域进行自动的优化过程
  9. PHP中数组的三种排序方法
  10. 机器人军团【动态规划】
  11. php implode key,PHP Implode关联数组
  12. 你的目的是什么是谁指使你_魔家四将的师傅是谁?隐藏的高人,只配合太上老君的布局...
  13. 语音广播服务器,智慧校园语音广播说明(二)
  14. ATM模拟演示软件之通信组件
  15. 2022.04.17(LC_6070_计算字符串的数字和)
  16. 关于qt缺少xcb问题终极解决办法
  17. d盘格式化了能正常使用吗
  18. lsnrctl 未找到命令
  19. 编译原理(7):运行存储分配
  20. C语言编码转换----负数的二进制表示方法

热门文章

  1. 学习使用Bootstrap弹出框Popover提示框样式
  2. 漫谈软件工程(1)——回顾十年软件开发经历
  3. 【王道】数据结构与算法绪论(一)
  4. 今天心情贼好,是时候让老董请喝酒了。
  5. 情绪低落时,你该做些什么?
  6. 阿里云CentOS-6.7-i386-bin-DVD1.iso下载地址
  7. 中文 NLP(11) -- stanfordNLP 生成文法之 PCFG 模型
  8. puppet的web管理工具foreman安装配置简明步骤
  9. python下载txt_腾讯读书转TXT文件下载python代码
  10. 绕过kernel32自己实现WriteProcessMemory