目录
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