欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-28 08:03:26
...

目录

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}]>