单表操作

添加记录

方式1

# 先实例化models中的对象,按照定义的语句规则传入参数,然后使用对象调用save()保存到数据库
book_obj = Book(id=1,title='python',price=99.9,pub_date='2018-12-9',publish='人民币出版社')
book_obj.save()

方式2 create是有返回值的,返回值是当前生成的记录,使用.可以进行调用

# 不需要使用save()进行保存,自动保存

book_obj = Book.objects.create(title='liunx',price=22.9,pub_date='2018-12-9',publish='人民币出版社')
print(book_obj.title)
print(book_obj.pub_date)

单表查询API

all():查询所有,返回值是QuerySet,支持for循环以及切片操作

book_list = Book.objects.all()
for i in book_list:
print(i.title)

first(),last():第一个和最后一个。调用者是Query对象,返回的是一个模型对象

book = Book.objects.all().first()

filter() 过滤,对应sql语句的where。调用者是objects,返回值是QuerySet。可以多个查询条件,传入参数的时候以, 隔开

book = Book.objects.filter(id=1)
print(book[0].title)

get()与filter方法类似,有且只有一个查询结果时才有意义,假如说查询结果是多个对象会保存或者没有查询到结果时也会保存,调用者是objects,返回值是一个model对象

book = Book.objects.get(id=1)
print(book.title)

exclude()排除,与filter相反。调用者是objects,返回值是QuerySet。

# 除了python等于python的都找出来
book = Book.objects.exclude(title='python')
print(book[1].title)

order_by()排序,调用者是QuerySet,返回值是QuerySet,默认是升序,在字段前加上 - 是倒叙。可以传入多个排序字段,如果第一个相等的情况下,会对第二个参数进行判断排序。

book = Book.objects.all().order_by('id')
# book = Book.objects.all().order_by('-id') 倒叙排序
print(book)

reverse():对查询结果反向排序,调用者是QuerySet

count():调用者是QuerySet,返回值是数字类型

book = Book.objects.all().count()
print(book)

exists():判断QuerySet是否有值,调用者这是QuerySet,返回值是bool

book = Book.objects.all().exists()
print(book)# True

values()内部去循环一个QuerySet,返回一个QuerySet,返回值是一个列表嵌套字典,键是传入values的值,值是查询出来的值

values()内部实现原理

def values(val):
tmp = []
for obj in Book.objects.all():
tmp.append({
'id':obj.id
})
return tmp
values('id')

values()的调用者可以是一个QuerySet也可以是一个objects

book = Book.objects.all().values('id','price')
# <QuerySet [{'id': 1, 'price': Decimal('99.90')}, {'id': 2, 'price': Decimal('22.90')}, {'id': 3, 'price': Decimal('2000.90')}]>
print(book)
# book = Book.objects.values('id','price')

values_list():调用者是QuerySet对象,返回值是QuerySet(一个列表中嵌套查询出来的值放在元组内)

book = Book.objects.all().values_list('id')
print(book)
# <QuerySet [('python',), ('liunx',), ('射雕英雄传',)]>

distinct():从返回结果中剔除重复的记录。调用者是QuerySet,返回值是QuerySet。all()后面调用distinct()是没有意义的,可以用在固定查询某个字段的时候使用

book = Book.objects.all().values('price').distinct()
print(book)

单表查询之模糊查询

# 大于:__gt
ret = Book.objects.filter(price__gt=10) # 小于:__lt
ret = Book.objects.filter(price__lt=10) # 以什么什么开头:__startswith
ret = Book.object.filter(price__startswith) # 只要有什么就查询出来__contains
ret = Book.objects.filter(title__contains='h') # 与上面类似,不区分大小写:__icontains
ret = Book.objects.filter(title__icontains='h') # 只要在字段在列表内:__in
ret = Book.objects.filter(title__in=['python','liunx']) # 在某某之间:__range
ret = Book.objects.filter(price_range=[1,200]) # 查询年月日:__year,__month,__day(必须是Date才能调用)
ret = Book.objects.filter(pub_date__year=2018)

单表操作之修改与删除

先查询出需要进行删除修改的数据,然后调用相应的方法

删除:delete()调用者是QuerySet对象与model对象返回值是删除的记录数量

book = Book.objects.filter(title='liunx').delete()

修改:update()调用者必须是QuerySet

Django之模型层-单表操作的更多相关文章

  1. 第五章、Django之模型层---单表操作

    目录 第五章.Django之模型层---单表操作 一.ORM查询 二.Django测试环境搭建 三.单表查询 1. 增 2. 改 3. 删 4. 查 第五章.Django之模型层---单表操作 一.O ...

  2. 05 Django之模型层---单表操作

    一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...

  3. Django之模型层:表操作

    目录 Django之模型层:表操作 一.ORM简介 django测试环境搭建 Django终端打印SQL语句 二 单表操作 2.1 按步骤创建表 2.2记录 三.多表操作 1 创建模型 2 添加.删除 ...

  4. Django模型层-单表操作

    ORM介绍 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的 ...

  5. Django基础(3)----模型层-单表操作,多表创建

    昨日内容回顾: 1. {% include '' %} 2. extend base.html: <html> ..... ..... ..... {% block content%} { ...

  6. Django-5.1 模型层 单表操作

    7.1 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开 ...

  7. python 全栈开发,Day71(模型层-单表操作)

    昨日内容回顾 1. {% include '' %} 2. extend base.html: <html> ..... ..... ..... {% block content%} {% ...

  8. Django之模型---ORM 单表操作

    以上一随笔中创建的book表为例讲解单表操作 添加表记录 方式一 # create方法的返回值book_obj就是插入book表中的python葵花宝典这本书籍纪录对象 book_obj=Book.o ...

  9. Django之模型层-多表操作

    多表操作 数据库表关系 一对多:两个表之间的关系一旦确定为一对多,必须在数据多的表中创建关联字段 多对多:两个表之间的关系一定确定为多对多,必须创建第三张表(关联表) 一对一:一旦两个表之间的关系确定 ...

随机推荐

  1. jedata日期控件的开始结束日期设置

    <span class="wstxt">开始日期:</span><input type="text" class="wo ...

  2. possible error

    1● regedit 2● path [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Windows Error Reporting]       3● 步 ...

  3. 异步socket处理

    服务器端: #include <boost/thread.hpp> #include <boost/asio.hpp> #include <boost/date_time ...

  4. EtherCAT(扒自百度百科)

    EtherCAT(以太网控制自动化技术)是一个开放架构,以以太网为基础的现场总线系统,其名称的CAT为控制自动化技术(Control Automation Technology)字首的缩写.Ether ...

  5. 尚学堂java 答案解析 第五章

    本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改 一.选择题 1.AB 解析:A可以被所有类访问,B可以被当前包的所有类访问,也可以被所有子类访问 2.A 解析:所有 ...

  6. day05 可变不可变类型

    #可变类型: 值变了,但是id没有变,证明没有生成新的值而是在改变原值,原值是可变类型#不可变类型:值变了,id也跟着变,证明是生成了新的值而不是在改变原值,原值是不可变 # x=10# print( ...

  7. 银联支付 Asp.Net 对接开发内容简介

    银联对接开发主要包含测试环境以及生产环境两部分. 其中程序开发部分测试以及生产是相同的. 不同的是,测试环境与生产环境请求支付的Url地址,以及分别使用的证书不同. 一.配置部分 1,测试环境证书获取 ...

  8. bzoj3976

    题解: 先跑一下Sa 然后再用kmp匹配一下哪一些位置不行 然后二分答案 代码: #include<bits/stdc++.h> ; using namespace std; int t[ ...

  9. OOP ⑴

    1.面向对象 类和对象的关系 类是我们在生活中,对身边的一系列事物,进行的不自觉的分类! 只是脑海中的一个印象! 在现实生活中,不存在! 存在的是我们这个印象的具体反映! 对象:用来描述客观事物的一个 ...

  10. es6-priomise

    Promise是异步编程的一种解决方案,它有三种状态,分别是 pending-进行中 resolved-已完成 rejected-已失败 状态一旦改变,就无法再次改变状态,这也是它名字promise- ...