Django基础篇-使用shell操作Mysql数据库表

目录

1. Django中使用自带的shell软件,与关系型数据库(mysql)进行操作

2. 增加数据: 

3. 删除数据:

4. 更改或者更新数据:

5. 查询数据:


1. Django中使用自带的shell软件,与关系型数据库(mysql)进行操作

>> 思路:

  • 1. 一个类对应一张数据表,2. 一个实例化对象对应表中的一条数据
  • 1. 就比如我们创建好的一个模型类相当于一张数据表
  • 2. 一个模型类实例化对象,就相当于表中的一条数据,操作对象,就相当于操作数据表的一条数据信息,可以对数据进行等操作。

1)进入shell工具命令:

python manage.py shell

2)导入模型类,以便后续使用,导入模型类,是因为我们要通过模型类对数据库中数据操作

from 子应用名.models import 模型类名1,模型类名2

2. 增加数据: 

方法: 对象 = 类(写入增加的字段信息)

实例化模型类对象
对象 = 模型类名(
    字段1="需要添加的信息",
    字段2="需要添加的信息",
    字段3="需要添加的信息",
)

# 执行完后一定要
对象.save()

例如: 

SQL语句: INSERT INTO `tb_heros` (`hbook_id`, `hname`, `hgender`, `hcomment`, `is_delete`) VALUES (5, '唐僧', 0, NULL, 0)

>>> from users.models import BookInfo,HeroInfo
>>> hero = HeroInfo(
... hname = "唐僧",
... hgender = 0,
... hbook_id = 5)
>>> hero.save()  # 必须执行提交数据

3. 删除数据:

使用查询集删除: 模型类.objects.filter().delete( )

例如: 删除 tb_heros 表中 id=21 的数据

SQL:  DELETE FROM `tb_heros` WHERE `tb_heros`.`id` = 21

>>> HeroInfo.objects.filter(id=21).delete()
(1, {'users.HeroInfo': 1})

4. 更改或者更新数据:

使用 模型类.objects.filter().update(),会返回受影响的行数

例如: 将 tb_heros 表中 hname="猪悟能"  修改为 " 猪八戒"

SQL:  UPDATE `tb_heros` SET `hname` = '猪八戒' WHERE `tb_heros`.`hname` = '猪悟能'

>>> HeroInfo.objects.filter(hname="猪悟能").update(hname="猪八戒")
1

5. 查询数据:

获取过滤查询的方法:  实现 SQL 中的 where 功能

  • filter 过滤出多个结果
  • exclude 排除掉符合条件剩下的结果
  • get 过滤单一结果

对于过滤条件的使用,上述三个方法相同。

过滤条件的表达语法如下:

  • 属性名称 和 比较运算符间使用两个下划线,所以属性名不能包括多个下划线
  • 属性名称__比较运算符 = 值  -->> 字段名__比较运算符 = 值

相等

exact  英 /ɪɡˈzækt/ :表示相等  

例如: 查询 id 为 5 的英雄信息。

SQL: SELECT `tb_heros`.`hname` FROM `tb_heros` WHERE `tb_heros`.`id` = 5 

>>> hero = HeroInfo.objects.filter(id__exact = 5)
>>> print(hero.values())
<QuerySet [{'id': 5, 'hbook_id': 1, 'hname': '梅超风', 'hgender': 0, 'hcomment': '九阴白骨爪', 'is_delete': False}]>

模糊查询

contains  英  /kən'teinz/ :是否包含  

  • 说明:如果要包含%无需转义,直接写即可。

例如: 查询书名以'部'结尾的图书

SQL: 

>>> book = BookInfo.objects.filter(btitle__contains="部")
>>> print(book.values())
<QuerySet [{'id': 2, 'btitle': '天龙八部', 'bpub_date': datetime.date(1986, 7, 24), 'bread': 36, 'bcomment': 40, 'is_delete': False}]>

startswith、endswith:以指定值开头或结尾

例:查询书名以'天'开头的图书

SQL: SELECT `tb_books`.`id`, `tb_books`.`btitle`, `tb_books`.`bpub_date`, `tb_books`.`bread`, `tb_books`.`bcomment`, `tb_books`.`is_delete` FROM `tb_books` WHERE `tb_books`.`btitle` LIKE BINARY '天%'

>>> book = BookInfo.objects.filter(btitle__startswith="天")
>>> print(book.values())
<QuerySet [{'id': 2, 'btitle': '天龙八部', 'bpub_date': datetime.date(1986, 7, 24), 'bread': 36, 'bcomment': 40, 'is_delete': False}]>

例:查询书名以'部'结尾的图书

SQL: SELECT `tb_books`.`id`, `tb_books`.`btitle`, `tb_books`.`bpub_date`, `tb_books`.`bread`, `tb_books`.`bcomment`, `tb_books`.`is_delete` FROM `tb_books` WHERE `tb_books`.`btitle` LIKE BINARY '%部'

>>> book = BookInfo.objects.filter(btitle__endswith="部")
>>> print(book.values())
<QuerySet [{'id': 2, 'btitle': '天龙八部', 'bpub_date': datetime.date(1986, 7, 24), 'bread': 36, 'bcomment': 40, 'is_delete': False}]>

空查询

isnull:是否为null  值 :False 

例:查询书名不为空的图书。

SQL: SELECT `tb_books`.`id`, `tb_books`.`btitle`, `tb_books`.`bpub_date`, `tb_books`.`bread`, `tb_books`.`bcomment`, `tb_books`.`is_delete` FROM `tb_books` WHERE `tb_books`.`btitle` IS NOT NULL

>>> book = BookInfo.objects.filter(btitle__isnull=False)
>>> print(book.values())
<QuerySet [{'id': 1, 'btitle': '射雕英雄传', 'bpub_date': datetime.date(1980, 5, 1), 'bread': 12, 'bcomment': 34, 'is_delete': False}, {'id': 2, 'bt: '天龙八部', 'bpub_date': datetime.date(1986, 7, 24), 'bread': 36, 'bcomment': 40, 'is_delete': False}, {'id': 3, 'btitle': '笑傲江湖', 'bpub_date'me.date(1995, 12, 24), 'bread': 20, 'bcomment': 80, 'is_delete': False}, {'id': 4, 'btitle': '雪山飞狐', 'bpub_date': datetime.date(1987, 11, 11), 'd': 58, 'bcomment': 24, 'is_delete': False}, {'id': 5, 'btitle': '西游记', 'bpub_date': datetime.date(1998, 1, 1), 'bread': 10, 'bcomment': 10, 'is_ete': False}]>

范围查询

in:是否包含在范围内  值:[ ]

例:查询编号为1或3或5的英雄

SQL:    SELECT `tb_heros`.`id`, `tb_heros`.`hbook_id`, `tb_heros`.`hname`, `tb_heros`.`hgender`, `tb_heros`.`hcomment`, `tb_heros`.`is_delete` FROM `tb_heros` WHERE `tb_heros`.`id` IN (1, 3, 5)

>>> hero = HeroInfo.objects.filter(id__in = [1,3,5])
>>> print(hero.values())
<QuerySet [{'id': 1, 'hbook_id': 1, 'hname': '郭靖', 'hgender': 1, 'hcomment': '降龙十八掌', 'is_delete': False}, {'id': 3, 'hbook_id': 1, 'hname': 'hgender': 1, 'hcomment': '弹指神通', 'is_delete': False}, {'id': 5, 'hbook_id': 1, 'hname': '梅超风', 'hgender': 0, 'hcomment': '九阴白骨爪', 'is_de}]>

比较查询

  • gt 大于 (greater then)
  • gte 大于等于 (greater then equal)
  • lt 小于 (less then)
  • lte 小于等于 (less then equal)

例:查询编号大于3的英雄

SQL:     SELECT `tb_heros`.`id`, `tb_heros`.`hbook_id`, `tb_heros`.`hname`, `tb_heros`.`hgender`, `tb_heros`.`hcomment`, `tb_heros`.`is_delete` FROM `tb_heros` WHERE `tb_heros`.`id` >= 2

>>> hero = HeroInfo.objects.filter(id__gt=3)
>>> print(hero.values())
<QuerySet [{'id': 4, 'hbook_id': 1, 'hname': '欧阳锋', 'hgender': 1, 'hcomment': '蛤蟆功', 'is_delete': False}, {'id': 5, 'hbook_id': 1, 'hname': '梅hgender': 0, 'hcomment': '九阴白骨爪', 'is_delete': False}, {'id': 6, 'hbook_id': 2, 'hname': '乔峰', 'hgender': 1, 'hcomment': '降龙十八掌', 'is_de}, {'id': 7, 'hbook_id': 2, 'hname': '段誉', 'hgender': 1, 'hcomment': '六脉神剑', 'is_delete': False}, {'id': 8, 'hbook_id': 2, 'hname': '虚竹', 'h 1, 'hcomment': '天山六阳掌', 'is_delete': False}, {'id': 9, 'hbook_id': 2, 'hname': '王语嫣', 'hgender': 0, 'hcomment': '神仙姐姐', 'is_delete': Fa 10, 'hbook_id': 3, 'hname': '令狐冲', 'hgender': 1, 'hcomment': '独孤九剑', 'is_delete': False}, {'id': 11, 'hbook_id': 3, 'hname': '任盈盈', 'hgenhcomment': '弹琴', 'is_delete': False}, {'id': 12, 'hbook_id': 3, 'hname': '岳不群', 'hgender': 1, 'hcomment': '华山剑法', 'is_delete': False}, {'idbook_id': 3, 'hname': '东方不败', 'hgender': 0, 'hcomment': '葵花宝典', 'is_delete': False}, {'id': 14, 'hbook_id': 4, 'hname': '胡斐', 'hgender': 1, 'hcomment': '胡家刀法', 'is_delete': False}, {'id': 15, 'hbook_id': 4, 'hname': '苗若兰', 'hgender': 0, 'hcomment': '黄衣', 'is_delete': False}, { 'hbook_id': 4, 'hname': '程灵素', 'hgender': 0, 'hcomment': '医术', 'is_delete': False}, {'id': 17, 'hbook_id': 4, 'hname': '袁紫衣', 'hgender': 0,nt': '六合拳', 'is_delete': False}, {'id': 18, 'hbook_id': 5, 'hname': '孙悟空', 'hgender': 0, 'hcomment': None, 'is_delete': False}, {'id': 19, 'hb': 5, 'hname': '沙悟净', 'hgender': 0, 'hcomment': None, 'is_delete': False}, {'id': 20, 'hbook_id': 5, 'hname': '猪八戒', 'hgender': 0, 'hcomment': 'is_delete': False}, {'id': 22, 'hbook_id': 5, 'hname': '唐僧', 'hgender': 0, 'hcomment': None, 'is_delete': False}]>

不等于的运算符,使用exclude()过滤器。

例:查询编号不等于3的图书

SQL:     SELECT `tb_books`.`id`, `tb_books`.`btitle`, `tb_books`.`bpub_date`, `tb_books`.`bread`, `tb_books`.`bcomment`, `tb_books`.`is_delete` FROM `tb_books` WHERE NOT (`tb_books`.`id` = 3)

>>> book = BookInfo.objects.exclude(id=3)
>>> print(book.values())
<QuerySet [{'id': 1, 'btitle': '射雕英雄传', 'bpub_date': datetime.date(1980, 5, 1), 'bread': 12, 'bcomment': 34, 'is_delete': False}, {'id': 2, 'bt: '天龙八部', 'bpub_date': datetime.date(1986, 7, 24), 'bread': 36, 'bcomment': 40, 'is_delete': False}, {'id': 4, 'btitle': '雪山飞狐', 'bpub_date'me.date(1987, 11, 11), 'bread': 58, 'bcomment': 24, 'is_delete': False}, {'id': 5, 'btitle': '西游记', 'bpub_date': datetime.date(1998, 1, 1), 'brea 10, 'bcomment': 10, 'is_delete': False}]>

日期查询

  • year、month、day、
  • week_day、hour、minute、second:
  • 对日期时间类型的属性进行运算

例:查询1980年发表的图书。

SQL: SELECT `tb_books`.`id`, `tb_books`.`btitle`, `tb_books`.`bpub_date`, `tb_books`.`bread`, `tb_books`.`bcomment`, `tb_books`.`is_delete` FROM `tb_books` WHERE `tb_books`.`bpub_date` BETWEEN '1980-01-01' AND '1980-12-31'

>>> book = BookInfo.objects.filter(bpub_date__year=1980)
>>> print(book.values())
<QuerySet [{'id': 1, 'btitle': '射雕英雄传', 'bpub_date': datetime.date(1980, 5, 1), 'bread': 12, 'bcomment': 34, 'is_delete': False}]>

例:查询1980年1月1日后发表的图书。

SQL: SELECT `tb_books`.`id`, `tb_books`.`btitle`, `tb_books`.`bpub_date`, `tb_books`.`bread`, `tb_books`.`bcomment`, `tb_books`.`is_delete` FROM `tb_books` WHERE `tb_books`.`bpub_date` > '1990-01-01'

>>> from datetime import date
>>> book = BookInfo.objects.filter(bpub_date__gt=date(1990, 1, 1))
>>> print(book.values())
<QuerySet [{'id': 3, 'btitle': '笑傲江湖', 'bpub_date': datetime.date(1995, 12, 24), 'bread': 20, 'bcomment': 80, 'is_delete': False}, {'id': 5, 'bt': '西游记', 'bpub_date': datetime.date(1998, 1, 1), 'bread': 10, 'bcomment': 10, 'is_delete': False}]>

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值