设为首页 加入收藏

TOP

django的数据库操作-16(一)
2018-11-15 12:08:25 】 浏览:162
Tags:django 数据库 操作 -16

目录

Django的manage工具提供了shell命令,已经帮助我们配置好当前工程的运行环境(如连接好数据库等),我们会在自带终端中执行测试python语句。

manage.py 所在目录执行命令

python manage.py shell

这打开了一个交互式命令行。

导入模型类

from book.models import Book
from book.models import Role

导入date包处理时间

from datetime import date

增加数据有两种方式

1.save

创建模型类对象,再使用 save 保存到数据库中

新增书籍 “西游记”

book = Book(
    b_title="西游记", 
    b_pub_date=date(1988,1,1), 
    b_read=20, 
    b_comment=10, 
    is_delete=False)
    
>>> book.save()

2.create

直接保存到数据库中

“西游记”书籍新增角色 “孙悟空”

Role.objects.create(
r_name="孙悟空", 
r_gender="1", 
r_describe="猴哥", 
r_book_id=book.id)

1.基本查询

get 查询单一结果,如果不存在会抛出模型类.DoesNotExist异常,返回一个模型类对象。

all 查询多个结果,返回一个查询集。

count 查询结果数量。

get

get 查询单一结果,如果不存在会抛出模型类.DoesNotExist异常。

查询编号为5的书籍

>>> Book.objects.get(pk=5)
<Book: Book object>

objects 是模型管理器,会在后边有具体的讲解。

pk代表primary key的缩写,也就是任何model中都有的主键,当id也是主键的时候,我们可以认为pk和id是完全一样的。但是当model的主键不是id的时候,两者就有了区别。

输出出来的 <Book: Book object> 无法看出是不是我们写进去的数据,为了让显示更人性化,我们给数据库模型添加一个 _str__ 方法。

class Book(models.Model):
    ...
    def __str__(self):
        return self.b_title

class Role(models.Model):
    ...
    def __str__(self):
        return self.r_name

重启shell,重新导入模型类

>>> Book.objects.get(id=5)
<Book: 西游记>

all

all 查询多个结果。

查询所有书

>>> Book.objects.all()
<QuerySet [<Book: 射雕英雄传>, <Book: 天龙八部>, <Book: 笑傲江湖>, <Book: 雪山飞狐>, <Book: 西游记>]>

count

count 查询结果数量。

获得书籍数量

>>> Book.objects.count()
5

2.过滤查询

过滤查询实现sql语句中的 where 功能,包括:

filter 过滤出多个结果,返回一个查询集

exclude 排除掉符合条件剩下的结果,返回一个查询集

get 过滤单一结果

过滤查询语法:

模型类名.objects.查询方式(过滤条件)

过滤条件语法:

字段名称__条件运算符=值

条件运算符:

exact:相等。

contains:包含。

startswith:指定值开头

endswith:指定值结尾

isnull:是否为null。

in:是否包含在范围内。

gt: 大于 (greater then)

gte: 大于等于 (greater then equal)

lt: 小于 (less then)

lte: 小于等于 (less then equal)

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

相等

exact:表示相等

查询书名等于“西游记”的书

>>> Book.objects.filter(b_title__exact="西游记")
<QuerySet [<Book: 西游记>]>

包含(模糊查询)

contains:包含

书名包含“八”字的书

>>> Book.objects.filter(b_title__contains="八")
<QuerySet [<Book: 天龙八部>]>

开头

书名“笑”开头的数

>>> Book.objects.filter(b_title__startswith="笑")
<QuerySet [<Book: 笑傲江湖>]>

结尾

>>> Book.objects.filter(b_title__endswith="狐")
<QuerySet [<Book: 雪山飞狐>]>

isnull:是否为null

书名不为空

>>> Book.objects.filter(b_title__isnull=False)
<QuerySet [<Book: 射雕英雄传>, <Book: 天龙八部>, <Book: 笑傲江湖>, <Book: 雪山飞狐>, <Book: 西游记>]>

包含(范围)

in:是否包含在范围内

编号 1,2,3的书

>>> Book.objects.filter(pk__in=[1, 2, 3])
<QuerySet [<Book: 射雕英雄传>, <Book: 天龙八部>, <Book: 笑傲江湖>]>

大于小于

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

编号大于3的书

>>> Book.objects.filter(pk__gt=3)
<QuerySet [<Book: 雪山飞狐>, <Book: 西游记>]>

时间

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

1995年的书

>>> Book.objects.filter(b_pub_date__ye
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇flask-login原理详解 下一篇python 获取类中除内置方法外的所..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目