单表操作

添加记录

方式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. NOI1995石子合并&多种石子合并

    题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将N堆石子合并成1 ...

  2. 从零开始学习Vue(四)

    这里引入一个概念SPA(single Page Application), 接着上次的例子,我们在页面底部做了一个Tab的菜单,点击不同的按钮应该是显示不同的内容. 按传统的MVC的思维,我要在Con ...

  3. MySQL(二) MySQL基本操作

    数据库的基本操作 启动关闭 MySQL 服务 MySQL 安装好后,默认是当 Windows 启动.停止时,MySQL 也自动.停止.不过,用户可以使用 Windows 下的服务管理器或从命令行使用 ...

  4. GitHub下的文件放到Linux系统下

    1.在GitHub账号下clone URL 项目. 2.到Linux服务器下执行以下操作: (1)  mkdir test (2)  cd test/ (3)  git clone  复制的项目URL

  5. json模块&xml

    json模块将数据修改成字符串,方便其他语言进行识别. 只认双引号,不认单引号.使用json.dumps的操作步骤 先将单引号修改成单引号 将变量使用单引号引起来 将数据类型编程json字符串 jso ...

  6. jsp自定义标签开发

    参考:http://blog.csdn.net/lw001x/article/details/7589302

  7. [BZOJ1588]营业额统计

    Problem 每次给你一个数,找出前面的数与这个数的差的绝对值的最小值 Solution Splay Notice 找不到前驱和后继时,会出错. Code #include<cmath> ...

  8. OO Summary Ⅱ

    [第五次作业——多线程电梯] 类图 度量 协作图 设计分析: 多线程电梯是我第一次接触多线程,因此真的是无(瞎)从(g)下(2)手(写),感觉仿佛只是用一个调度器来调度3部电梯但又总觉得好像哪里不太对 ...

  9. 【收集资料】OpenGL学习

    1.课本配套网站,有Sample Code和书中的图片等   http://math.ucsd.edu/~sbuss/MathCG/ 2.Visual C++的帮助系统可查阅基本OpenGL函数(不包 ...

  10. java 实现简单的顺序队列

    package com.my; import java.util.Arrays; /** * 顺序队列 * @author wanjn * */ public class ArrayQueue { p ...