Django基础篇-使用shell操作Mysql数据库表
目录
1. Django中使用自带的shell软件,与关系型数据库(mysql)进行操作
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}]>
下一篇: SAX解析