orm创建数据库

from django.db import models

# Create your models here.

class Book(models.Model):
name = models.CharField(max_length = 30)
price = models.DecimalField(max_digits=30,decimal_places=3)
date = models.DateTimeField()
publish = models.ForeignKey(to="Publish",to_field='id',on_delete = models.CASCADE)
authors = models.ManyToManyField(to='Author') class Publish(models.Model):
title = models.CharField(max_length = 30)
addr = models.IntegerField() class Author(models.Model):
name = models.CharField(max_length = 30)
addr = models.CharField(max_length = 30)
gf = models.OneToOneField(to='Gfriend',to_field='id',on_delete=models.CASCADE) class Gfriend(models.Model):
name = models.CharField(max_length =30)
age = models.IntegerField()

orm创建数据库

既然数据库已经建立完成那么 我们就可以对这个数据库进行操作了

先导入你新建立的models中的你建立的数据库表的名字

from one.models import Book

从新建立的app one中导入我建立的数据库的Book表

增加:


book_obj = Book (...)
book_obj.save()


 第一种:
book_obj = Book(name = '肉蒲团', price=30.6, publish ='老王出版社')
book_obj.save() 这个当你为Book表添加完内容后必须要执行save 不然你的内容无法添加

第二种是直接添加的  比较简便;

添加记录的方式2:create返回记录对象

 book_obj =  Book.objects.create(name = '金瓶', price = 47.67, publish = '老刘头出版社')

就是直接调用object基类 然后create创建 即可

一般推荐第二种

也可以直接插入多条数据:

obj = Book.objects.create(name = 'python1',price=666,publish = '全栈出版社')
obj = Book.objects.create(name = 'Python',price = 888,publish = '人工智能出版社')
obj = Book.objects.create(name = 'python',price=999,publish = '数据分析')

查询表纪录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<1all():                  查询所有结果
  
<2filter(**kwargs):       它包含了与所给筛选条件相匹配的对象
  
<3> get(**kwargs):          返回与所给筛选条件相匹配的对象,返回结果有且只有一个,
                            如果符合筛选条件的对象超过一个或者没有都会抛出错误。
  
<4> exclude(**kwargs):      它包含了与所给筛选条件不匹配的对象
 
<5> order_by(*field):       对查询结果排序
  
<6> reverse():              对查询结果反向排序
  
<8> count():                返回数据库中匹配查询(QuerySet)的对象数量。
  
<9> first():                返回第一条记录
  
<10> last():                返回最后一条记录
  
<11> exists():              如果QuerySet包含数据,就返回True,否则返回False
 
<12> values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列
                            model的实例化对象,而是一个可迭代的字典序列
<13> values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
 
<14> distinct():            从返回结果中剔除重复纪录

对应的演示:

每一次在你的数据库中插入一条数据就在你的queryset中建立一个对象obj

1、 all()
s = Book.objects.all()  这样得到的是一个queryset这种特殊类型
# 返回的是一个queryset数据类型对象,类似于 [obj,obj,.....]
因为内部都是存储的都是对象那么取值可以用for
s = Book.objects.all()
for obj in s:
print(obj.name)

2、   filter     返回的是一个queryset数据类型对象,[model_obj,.....]
其实filter就好比筛选的意思 它只能设置为等于来查找

s = Book.objects.filter(name = '金瓶')
# print(s) # 得到<QuerySet [<Book: Book object (3)>]>
for obj in s: #因为得到的是queryset你循环这个可迭代对象就取到里面的值就可以得到你想要的值了
print(obj.name)

3 、last first 根据切片来查找

last求最后一个 first求最后一个

obj = Book.objects.all().first()
# print(obj) #Book object (1)
print(obj.name) obj = Book.objects.all().last()
print(obj.name)

4、get 方法返回的就是一个modle对象 (有且只有一个 结果的时候才有意义 也就是只能查找为1的时候的结果)

obj = Book .objects.get(id = 3)
print(obj.name)

5、
exclude 排除的意思 和filter的差不多 filter是求出里面的条件 exclude是排除里面的值 并且都是得到queryset的类型

obj = Book.objects.exclude(name = '肉蒲团')  #得到的也是queryset所以也要用for来求取值
for i in obj:
print(i.name)
  • models.n.objcts.all().order_by("id") # 从小带大排序

  • models.n.objects.all().order_by("-id") #带减号的就是desc从大到小排序

  • models.n.objects.all().order_by("id","-age") # 先按照id排序 然后相同的id再按照age排序

6、order_by() 排序 默认熊小到大排序
默认从小到大:  也可以加减号  然后从大到小排序

ret = Book.objects.all().order_by('price')  #这个是求出所有并且按照价格来来排序
for i in ret:
print(i.name)
  • models.n.objcts.all().order_by("id") # 从小带大排序

  • models.n.objects.all().order_by("-id") #带减号的就是desc从大到小排序

  • models.n.objects.all().order_by("id","-age") # 先按照id排序 然后相同的id再按照age排序

从大到小用reverse()

ret = Book.objects.all().order_by('price').reverse()  #把你的得到的结果翻转 就是按照从大到小的结果来排序
for i in ret:
print(i.name)

7、
count 查找总数量

ret = Book.objects.all().count()  # 查找总数量
print(ret)

8、exists查找是否有在里面 返回的是True 或者False

ret = Book.objects.all().filter(price = 30.60).exists()
if ret:
print('help me')
else:
print('nothing')

9、values () 把你想要得到的内容放置在一个列表嵌套字典中 字典的键就是你想要得到的内容

obj = Book.objects.all().values('name')  # <QuerySet [{'name': '肉蒲团'}, {'name': '肉蒲团'}, {'name': '金瓶'}]>
print(obj)

values一般用于你要取这个表的指定的这个字段 比如你要对这个表中的name这个列进行对比 ,那么就用values先取出这个列再进行对比

10、values_list() 和values用法一样只不过得到的内容不同 这个得到的是列表嵌套元组

obj = Book.objects.all().values_list('name','price')
print(obj) #<QuerySet [('肉蒲团', Decimal('30.60')), ('肉蒲团', Decimal('30.60')), ('金瓶', Decimal('47.67'))]>

11、
distinct() 去重 根据你的条件去重 必须都满足

obj = Book.objects.all().values('name').distinct()
print(obj)

12、也可以直接指定下标来选择[ 下标]

obj = Book.objects.all().[3]

选择下标为3的对象
obj = Book.objects.all().[3,7]
这个是取到3-7的对象
 

上面的都是精准匹配就是必须使用==才能匹配到 下面我们学习模糊匹配:

模糊匹配:

模糊匹配都会在前面加双下划线__

大于:__gt:

 book_list = Book.objects.filter(price__gt = 10)  #大于__gt   匹配价格大于10 的物品
for i in book_list:
print(i.name)

小于: __lt

obj = Book.objects.all().filter(price__lt = 35) #查找价格小于35的物品的名称
for i in obj:
print(i.name)

大于等于:__gte

 obj = Book.objects.all().filter(price__gte = 20)   # 查找价格大于等于20的物品
for i in obj:
print(i.name)

小于等于:__lte

obj = Book.objects.all().filter(price__lte = 50) # 查找价格小于50的物品
for i in obj:
print(i.name)

范围:__range = [ ...]

range 可以等于[]也可以等于()

obj = Book.objects.all().filter(price__range = [10,100])
for i in obj:
print(i.name)

以...开头 __startswith

obj = Book.objects.all().filter(name__startswith = '金' )  查找名字是以金开头的物品
for i in obj:
print(i.name)

以...结尾:__endswiths:

obj = Book.objects.all().filter(name__endswith = '团') # 查找名字是以团结尾的物品
for i in obj:
print(i.name)

包含:__contains='包含内容' 这个是区分大小写  你规定大写就只能查到大写的  你规定小写的只能查到小写的

obj = Book.objects.all().filter(name__contains = '梅')  #查找名字包含梅的名字
for i in obj:
print(i.name)
obj1 = Book.objects.all().filter(name__contains = 'python')
for i in obj1:
print(i.name) 查找只含有小写的python的name

不区分大小写的查找__icontains = ''

 obj = Book.objects.all().filter(name__icontains='Python')
for i in obj:
print(i.name)
这个是查找所有的含有python的name不区分大小写

Book.objects.filter(pub_date__year=2012) 过滤年份

Book.objects.filter(pub_date__year=2012)
过滤你的pub_date的年份是2012的

修改表纪录:

根据你的查询内容修改只需要在你的查询条件后面加上update(修改内容)即可

Book.objects.filter(price__lte = 35).update(price=32)
这个是把你的价格小于35的全部改为32

删除表记录:

Book.objects.filter(price__lte = 35).delete()
删除价格小于35的物品
查询练习:

            1 查询老男孩出版社出版过的价格大于200的书籍
2 查询2017年8月出版的所有以py开头的书籍名称
3 查询价格为50,100或者150的所有书籍名称及其出版社名称
4 查询价格在100到200之间的所有书籍名称及其价格
5 查询所有人民出版社出版的书籍的价格(从高到低排序,去重)
6 查询价格大于200的书籍的个数
7 查询价格不等于100的所有书籍
8 查询苹果出版社出版的书籍中的第3-7本(前提存在足够数量的书籍)

models的单表操作的更多相关文章

  1. Django学习笔记(7)——单表操作和多表操作

    单表操作 1,创建模型 创建名为book的APP,在book下的models.py中创建模型: from django.db import models # Create your models he ...

  2. web框架开发-Django模型层(1)之ORM简介和单表操作

    ORM简介 不需要使用pymysql的硬编码方式,在py文件中写sql语句,提供更简便,更上层的接口,数据迁移方便(有转换的引擎,方便迁移到不同的数据库平台)…(很多优点),缺点,因为多了转换环节,效 ...

  3. Django模型层-单表操作

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

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

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

  5. Django单表操作

    一.数据库相关设置 配置ORM的loggers日志: # 配置ORM的loggers日志 LOGGING = { 'version': 1, 'disable_existing_loggers': F ...

  6. Django之模型层(单表操作)

    一.ORM简介 MVC和MTV框架中包含一个重要部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库. ORM是‘对象-关系- ...

  7. ORM 简介 单表操作

    cls超 Django基础五之django模型层(一)单表操作 本节目录 一 ORM简介 二 单表操作 三xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型 ...

  8. Django中模型层中ORM的单表操作

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

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

    单表操作 添加记录 方式1 # 先实例化models中的对象,按照定义的语句规则传入参数,然后使用对象调用save()保存到数据库 book_obj = Book(id=1,title='python ...

随机推荐

  1. 关于c#中”ref”和”out”关键字的一些理解

    一. 综述(本文内容大部分来自网络,经本人整理而成,仅供学习参考,不免理解错误,欢迎批评指正) 在c#中,方法的参数传递有四种类型: (1) 传值参数(by value) 传值参数无需额外的修饰符.传 ...

  2. Java:对象的强、软、弱和虚引用的区别

    1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK ...

  3. Jquery动画操作的stop()函数

    今天做一个点击动画时,遇到了当快速连续点击时,动画效果会乱,并不是我们想要达到的效果. 查询了一下,确认是动画累积的原因.网上搜了一下,发现jquery 的stop()函数刚好能解决. stop(cl ...

  4. android studio ndk 开发入门

    ndk 开发没什么神秘的ndk 说白了就是一个交叉编译的工具链,用它来生成各个CPU架构下的静态或动态链接库,linux 下就是 .a 和 .so 文件.原理就是 java 通过 JNI 和 C.C+ ...

  5. git push.default 几种设置笔记

    1 simple ,本地和远程分支同名才会推送,只会推送当前的分支到远程 ,默认推送分支数量:1 2 matching , 会推送匹配的本地分之到远程分之,假如本地有的分支远程没有,不会把本地推送到远 ...

  6. rails学习笔记: rake db 相关命令

    rails学习笔记: rake db 命令行 rake db:*****script/generate model task name:string priority:integer script/g ...

  7. Scrum 冲刺博客第五篇

    一.当天站立式会议照片一张 二.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中 昨天已完成的工作 实现题目的生成并将其显示到页面上,设置了背景音乐 今天计划完成的工作 判断 ...

  8. Angular: 使用 RxJS Observables 来实现简易版的无限滚动加载指令

    我使用 angular-cli 来搭建项目. ng new infinite-scroller-poc --style=scss 项目生成好后,进入 infinite-scroller-poc 目录下 ...

  9. 多线程-定时器Timer

    2019-04-1218:03:32 package 多线程.定时器Timer_重要; import java.util.Timer; import java.util.TimerTask; publ ...

  10. 八、window搭建spark + IDEA开发环境

    本文将简单搭建一个spark的开发环境,如下: 1)操作系统:window os 2)IDEA开发工具以及scala插件(IDEA和插件版本要对应): 2-1)IDEA2018.2.1:https:/ ...