django orm单表操作

orm语句 -- sql -- 调用pymysql客户端发送sql -- mysql服务端接收到指令并执行

增:

方式1:
    new_obj = models.UserInfo(
        id=2,
        name='小猿1',
        bday='2019-09-27',
        checked=1,
    )
    new_obj.save()
方式2:
    # ret 是创建的新的记录的model对象(重点)
    ret = models.UserInfo.objects.create(
        name='小猿2',
        bday='2019-08-07',
        checked=0
    )
# objects相当于一个控制器,它可以控制这个类给这个类一些操作方法,比如增删改查等

    print(ret)  #UserInfo object  ret是实例化对象
    print(ret.name)    # 获取当前实例化对象的name值
    print(ret.bday)  

时间问题

models.UserInfo.objects.create(
        name='大猿2',
        bday=current_date,
        # now=current_date,  直接插入时间没有时区问题
        checked=0
    )
#但是如果让这个字段自动来插入时间,就会有时区的问题,auto_now_add创建记录时自动添加当前创建记录时的时间,存在时区问题
now = models.DateTimeField(auto_now_add=True,null=True)
# null = True是因为以前的这个列是新加的,所以就会存在以前的那些数据中没有这个列的数据信息,而这个语句,默认是不允许为空的,所以为了不报错就会加这么一个条件
解决方法:
    settings配置文件中将USE_TZ的值改为False
    USE_TZ = False  # 告诉mysql存储时间时按照当地时间来存,不要用utc时间
#使用pycharm的数据库客户端的时候,时区问题要注意

删:

简单查询:filter()  -- 结果是queryset类型的数据里面是一个个的model对象,类似于列表
    models.UserInfo.objects.filter(id=7).delete()  #queryset对象调用
    models.UserInfo.objects.filter(id=7)[0].delete()  #model对象调用

改:

方式1:update
     models.UserInfo.objects.filter(id=2).update(
         name='篮子文',
         checked = 0,
     )

    错误示例,model对象不能调用update方法
    # models.UserInfo.objects.filter(id=2)[0].update(
    #     name='加篮子+2',
    #     # checked = 0,
    # )

方式2
    ret = models.UserInfo.objects.filter(id=2)[0]
    ret.name = '加篮子+2'
    ret.checked = 1
    ret.save()

更新时的auto_now参数
# 更新记录时,自动更新时间,创建新纪录时也会帮你自动添加创建时的时间,但是在更新时只有使用save方法的方式2的形式更新才能自动更新时间,有缺陷,放弃
    now2 = models.DateTimeField(auto_now=True,null=True)

注意:更新操作时会有一个返回值,是一个int类型,不是返回一个queryset对象
ret = models.Book.objects.filter(title='西游记').update(
    price = 500
)
print(ret)
1

批量插入(bulk_create)

    # bulk_create
    obj_list = []
    for i in range(20):
        obj = models.Book(
            title=f'头发的秘密{i}',
            price=20+i,
            publish_date=f'2019-09-{i+1}',
            publish='24期出版社'
        )
        obj_list.append(obj)

    models.Book.objects.bulk_create(obj_list)  #批量创建

从post提交的数据获取值写入数据库的方法

data = request.POST.dict() -- 能够将querydict转换为普通的python字典格式
#创建数据
    models.Book.objects.create(
            **data     # 将data中的字典打散
        )

request.POST --  querydict类型 {'title': ['asdf '], 'price': ['212'], 'publish_date': ['2019-09-12'], 'publish': ['asdf ']}

查询api:

all()  结果为queryset类型

filter 条件查询
    ret = models.Book.objects.filter(title='头发的秘密7',publish='24期出版社') #and多条件查询
    查询条件不能匹配到数据时,不会报错,返回一个空的queryset,<QuerySet []>,如果没有写查询条件会获取所有数据,queryset类型的数据还能够继续调用fitler方法

get()
    ret = models.Book.objects.get() #得到的是一个model对象,有且只能有一个
    1. 查不到数据会报错 :Book matching query does not exist.
    ret = models.Book.objects.get(name__startswith='斗罗大陆')
    2. 超过一个就报错 :returned more than one Book -- it returned 13!

exclude()  #排除
    1.object能够调用,models.Book.objects.exclude(title__startswith='头发的秘密')
    2.queryset类型数据能够调用, models.Book.objects.all().exclude(title__startswith='头发的秘密')

order_by()排序
    models.Book.objects.all().order_by('-price','id')  #orderby price desc,id asc;

reverse() 反转
    models.Book.objects.all().order_by('id').reverse()  #数据排序之后才能反转

count() 计数,统计返回结果的数量
    models.Book.objects.all().count()
first() 返回第一条数据,结果是model对象类型
last()  返回最后一条数据,结果是model对象类型
    # ret = models.Book.objects.all().first()
    ret = models.Book.objects.all().last()

exists() 判断返回结果集是不是有数据
    models.Book.objects.filter(id=9999).exists() #有结果就是True,没有结果就是False

values(返回的queryset,里面是字典类型数据)
values_list(返回的queryset,里面是数组类型数据)
    ret = models.Book.objects.filter(id=9).values('title','price')
    # ret = models.Book.objects.all().values_list('title','price')
    # ret = models.Book.objects.all().values()
    # ret = models.Book.objects.values()  #调用values或者values_list的是objects控制器,那么返回所有数据 

distinct() 去重,配置values和values_list来使用
    models.Book.objects.all().values('publish').distinct()

filter双下划线查询

1. __gt--- 大于,__gte ----  大于等于,  lt ---  小于, lte  -----   小于等于

     ret = models.Book.objects.filter(price__gt=35)  #大于
     ret = models.Book.objects.filter(price__gte=35) # 大于等于
     ret = models.Book.objects.filter(price__lt=35) # 小于等于
     ret = models.Book.objects.filter(price__lte=35) # 小于等于

2. __range  在什么和什么之间
     ret = models.Book.objects.filter(price__range=[35,38]) # 大于等35,小于等于38   # where price between 35 and 38

3. __contains  --- #字段数据中包含这个字符串的数据都要

     ret = models.Book.objects.filter(title__contains='头发的秘密')
     ret = models.Book.objects.filter(title__contains='头发的秘密')

4. __icontains  -----     不区分大小写
     ret = models.Book.objects.filter(title__icontains="python")
     ret = models.Book.objects.filter(title__icontains="python")  

5. __startswith  -----   以什么开头,istartswith  不区分大小写
     ret = models.Book.objects.filter(title__startswith="py") 

6. 某年某月某日:
     ret = models.Book.objects.filter(publish_date__year='2018')
     ret = models.Book.objects.filter(publish_date__year__gt='2018')#2018写数字也可以
     ret = models.Book.objects.filter(publish_date__year='2019',publish_date__month='8',
     publish_date__day='1')

7.找字段数据为空的双下滑线
    models.Book.objects.filter(publish_date__isnull=True) #这个字段值为空的那些数据

8. 等于这里面的任意一个的对象
Book.objects.filter(price__in=[100,200,300]) 

原文地址:https://www.cnblogs.com/zhufanyu/p/11666540.html

时间: 2024-10-12 07:47:18

django orm单表操作的相关文章

Django框架05 /orm单表操作

目录 Django框架05 /orm单表操作 昨日内容回顾 今日内容 orm单表操作 对象关系映射(object relational mapping) 1.orm介绍 2.增: 3.时间问题 4.删 5.改 6.批量插入 -- bulk_create 7.查询api 8.基于双下划线的模糊查询 -- filter双下划线查询 9.总结 总结1 总结2 Django框架05 /orm单表操作 昨日内容回顾 模板相关 模板继承(母版继承) 1. 创建一个xx.html页面(作为母版,其他页面来继承

17-2 orm单表操作和多表操作

参考:https://www.cnblogs.com/liwenzhou/p/8660826.html 一  ORM单表操作 1 增删改查 1 1. 查询 2 1. 查所有 3 models.Publisher.objects.all() 4 2. 查某个具体的记录 5 models.Publisher.objects.get(id=1) --> 注意查询条件不成立就报错 6 2. 删除一条记录 7 models.Publisher.objects.get(id=1).delete() 8 3.

django orm 单表增删改查

一 简单增删改查 1.增 User.objects.create(name='Alan', age=10, birthday='2018-08-08') user = User(name='Alan', age=10, birthday='2018-08-08') user.save() 2.查询 # 操作的结果拥有是一个list users = User.objects.filter(name='Owen') # 只能操作有且只有一条数据记录 user = User.object.set(id

Django学习【第6篇】:Django之ORM单表操作(增删改查)

django之数据库表的单表查询 一.添加表记录 对于单表有两种方式 # 添加数据的两种方式 # 方式一:实例化对象就是一条表记录 Frank_obj = models.Student(name ="海东",course="python",birth="2000-9-9",fenshu=80) Frank_obj.save() # 方式二: models.Student.objects.create(name ="海燕",co

Django ORM 多表操作

创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一的关系(one-to-one) 出版商模型:出版商有名称,所在城市以及email. 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系(one-

9.17 模型层 ORM 单表操作

1 创建模型 创建名为book的app,在book下的models.py中创建模型: from django.db import models # Create your models here. class Book(models.Model): id=models.AutoField(primary_key=True) title=models.CharField(max_length=32) state=models.BooleanField() pub_date=models.DateF

ORM 单表操作查询 多表操作查询及增删改查

------------------------------------------只有对前途乐观的人,才能不怕黑暗,才能有力量去创造光明.乐观不是目的,而是人生旅途中的一种态度. 多表操作 创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一的关系(one-to-one) 出版商模型:出版商有名称,所在城市以及email. 书籍模型: 书籍有书名和出版日期

ORM单表操作

本文目录 一.ORM简介 二.全局配置 三.搞搞搞 一.ORM简介 .ORM是“对象-关系-映射”的简称 .MVC或者MTV框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以,轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动. 二.全局配置 .单表是相对简单的Django项目,我们再次进行对单表的增删改查操作,话不多说,项目开始. 1.setting.py 文件配置静态路径.

django之单表操作

1.查询方法: <1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误. <4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 <5> order_by(*field): 对查询结果排序('-id') <6>