django基础五之django模型层单表操作(代码片段)

zengluo zengluo     2022-12-08     129

关键词:

ORM单表操作

类---表
类对象 --- 一行数据
类属性 --- 字段

 

创建记录方式1
    student_obj = models.Student(
        name=‘dazhaung‘,
        age=23,
    )
    student_obj.save()
创建记录方式2
    new_obj = models.Student.objects.create(name=‘xiaozhuang2‘,age=6) #写成 **‘name‘:‘xx‘
    print(new_obj)  #Student object --  model对象
    print(new_obj.name)  #点属性,可以获取对应字段的数据
    print(new_obj.age)

创建方式3 批量创建
    objs_list = []
    for i in range(100,3000000):
        obj = models.Student(
            name=‘xiangxixxx‘,
            age = 10,
        )
        objs_list.append(obj)

    models.Student.objects.bulk_create(objs_list)

创建方法4 update_or_create 有就更新,没有就创建
    models.Student.objects.update_or_create(
        name=‘红旭妹妹2‘,
        defaults=
            ‘age‘:38,
        
    )

添加日期数据
    import datetime
    current_date = datetime.datetime.now()
    # print(current_date) #2019-07-19 12:19:26.385654
    # 两种方式
    # models.Brithday.objects.create(name=‘B哥‘,date=current_date)
    # models.Brithday.objects.create(name=‘得港10‘,date=‘2000-12-08‘)

 

删:

 删除  delete  queryset 和model对象都可以调用
    models.Student.objects.get(id=3).delete()  #model对象来调用的delete方法
    models.Student.objects.filter(name=‘红旭妹妹‘).delete() #
    models.Student.objects.all().delete() #删除所有

 

更新 update方法 model对象不能调用更新方法 报错信息‘Student‘ object has no attribute ‘update‘
    只能queryset调用,如果
    models.Student.objects.get(name=‘红旭妹妹‘).update(age=38)
    models.Student.objects.filter(name=‘红旭妹妹‘).update(age=38)

 

简单查

查询所有的数据  .all方法 返回的是queryset集合
    all_objs = models.Student.objects.all()
    #<QuerySet [<Student: Student object>, <Student: Student object>, <Student: Student object>]> -- 类似于列表  --  queryset集合
    # for i in all_objs:
    #     print(i.name)
    print(all_objs)

条件查询  .filter方法,返回的也是queryset集合,查询不到内容,不会 报错,返回一个<QuerySet []>空的queryset
    objs = models.Student.objects.filter(id=2)  #找id为2的那条记录
    print(objs) #<QuerySet [<Student: xiaozhuang>]>
    objs = models.Student.objects.filter(name=‘dazhaung‘)
    print(objs) #<QuerySet [<Student: dazhaung>]>

条件查询 get方法,返回的是model对象,而且get方法有且必须只有1个结果
    obj = models.Student.objects.get(id=3)  #找id为3的那条记录
    print(obj)  #xiaozhuang2

 

查询接口

<1> all():                  查询所有结果,结果是queryset类型
  
<2> filter(**kwargs):       它包含了与所给筛选条件相匹配的对象,结果也是queryset类型 Book.objects.filter(title=‘linux‘,price=100) #里面的多个条件用逗号分开,并且这几个条件必须都成立,
是and的关系,or关系的我们后面再学,直接在这里写是搞不定or的 models.Student.objects.filter(id=7,name=‘大壮哥哥‘,age=78).update( name=‘大壮禅师‘, age=78 ) #打伞形式传参 models.Student.objects.filter(**‘id‘:7,‘name‘:‘大壮禅师‘).update(age=100) models.Student.objects.all().filter(id=7) queryset类型可以调用fitler在过滤 <3> get(**kwargs): 返回与所给筛选条件相匹配的对象,不是queryset类型,是行记录对象,返回结果有且只有一个, 如果符合筛选条件的对象超过一个或者没有都会抛出错误。捕获异常try。 Book.objects.get(id=1) <4> exclude(**kwargs): 排除的意思,它包含了与所给筛选条件不匹配的对象,没有不等于的操作昂,用这个exclude,返回值是queryset类型 Book.objects.exclude(id=6),
返回id不等于6的所有的对象,或者在queryset基础上调用,Book.objects.all().exclude(id=6) # exclude(**kwargs): 排除,objects控制器和queryset集合都可以调用,返回结果是queryset类型 # query = models.Student.objects.exclude(id=1) # print(query) # query = models.Student.objects.filter(age=38).exclude(id=6) # print(query)                  <5> order_by(*field): queryset类型的数据来调用,对查询结果排序,默认是按照id来升序排列的,返回值还是queryset类型                  models.Book.objects.all().order_by(‘price‘,‘id‘) #直接写price,默认是按照price升序排列,按照字段降序排列,
就写个负号就行了order_by(‘-price‘),order_by(‘price‘,‘id‘)是多条件排序,
按照price进行升序,price相同的数据,按照id进行升序 <6> reverse(): queryset类型的数据来调用,对查询结果反向排序,返回值还是queryset类型 # 排序之后反转 # query = models.Student.objects.all().order_by(‘id‘).reverse() # print(query) <7> count(): queryset类型的数据来调用,返回数据库中匹配查询(QuerySet)的对象数量。 <8> first(): queryset类型的数据来调用,返回第一条记录 Book.objects.all()[0] = Book.objects.all().first(),得到的都是model对象,不是queryset <9> last(): queryset类型的数据来调用,返回最后一条记录,结果为model对象类型 <10> exists(): queryset类型的数据来调用,如果QuerySet包含数据,就返回True,否则返回False                空的queryset类型数据也有布尔值True和False,但是一般不用它来判断数据库里面是不是有数据,如果有大量的数据,你用它来判断,那么就需要查询出所有的数据,效率太差了,用count或者exits                  例:all_books = models.Book.objects.all().exists() #翻译成的sql是SELECT (1) AS `a` FROM `app01_book` LIMIT 1,就是通过limit 1,取一条来看看是不是有数据 <11> values(*field): 用的比较多,queryset类型的数据来调用,返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列,只要是返回的queryset类型,就可以继续链式调用queryset类型的其他的查找方法,其他方法也是一样的。 <12> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列 <13> distinct(): values和values_list得到的queryset类型的数据来调用,从返回结果中剔除重复纪录,结果还是queryset query = models.Student.objects.all().values(‘age‘).distinct() print(query)

 

基于双下划线的模糊查询 filter 模糊查询

Book.objects.filter(price__in=[100,200,300]) #price值等于这三个里面的任意一个的对象
Book.objects.filter(price__gt=100)  #大于,大于等于是price__gte=100,别写price>100,这种参数不支持
Book.objects.filter(price__lt=100)
Book.objects.filter(price__range=[100,200])  #sql的between and,大于等于100,小于等于200
Book.objects.filter(title__contains="python")  #title值中包含python的
Book.objects.filter(title__icontains="python") #不区分大小写
Book.objects.filter(title__startswith="py") #以什么开头,istartswith  不区分大小写
Book.objects.filter(pub_date__year=2012)

# all_books = models.Book.objects.filter(pub_date__year=2012) #找2012年的所有书籍
    # all_books = models.Book.objects.filter(pub_date__year__gt=2012)#找大于2012年的所有书籍
    all_books = models.Book.objects.filter(pub_date__year=2019,pub_date__month=2)#找2019年月份的所有书籍,如果明明有结果,你却查不出结果,
是因为mysql数据库的时区和咱们django的时区不同导致的,了解一下就行了,你需要做的就是将django中的settings配置文件里面的USE_TZ = True改为False,就可以查到结果了,
以后这个值就改为False,而且就是因为咱们用的mysql数据库才会有这个问题,其他数据库没有这个问题。

 

外部文件操作django的models

#外部文件使用django的models,需要配置django环境
import os

if __name__ == __main__:
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "singletablehw.settings")
    import django
    django.setup()

    from app01 import models
    import datetime
    obj_list = []
    for i in range(1,10):
        obj = models.Book(
            title=葵花宝典第%s式%i,
            price=20 + i,
            pub_date=198%s-11-11 00:00:00%i,
            # pub_date=datetime.datetime.now(),

            publish= 吴老板出版社 if i < 5 else 太白出版社,

        )
        obj_list.append(obj)

    models.Book.objects.bulk_create(obj_list)

 

url别名反向解析

 #添加书籍
    url(r^add_book/, views.add_book,name=abook), #name=‘abook‘  别名

    # 删除书籍
    url(r^delete_book/(d+)/, views.delele_book,name=delete_book),

视图:
    from django.urls import reverse
    reverse(别名)  reverse(abook) -- /add_book/  #不带参数的
    print(reverse(delete_book,args=(71,))) #/delete_book/71/ 带参数的
模板
    % url abook %  无参数的
    % url delete_book book.id %  无参数的

 

 

django模型层:单表多表操作f与q查询(代码片段)

DJango模型层单表操作使用有几步:settings.py中配置连接数据库的地址,端口在init.py中使用pymysql在models.py里写类,一个类对应一个表,写属性数据库迁移命令,第一个命令是纪录,第二个命令才是真正的数据库同步导入models到views... 查看详情

django基础五之django模型层多表操作(代码片段)

...是在一对多的约束上加上唯一约束。模型建立如下:fromdjango.dbimportmodels#Createyourmodelshere.classAuthor(models.Model):#比较常用的信息放到这个表里面nid=models.AutoField(primary_key=True)name=models.CharField(max_length=32)age=models.IntegerField()#与AuthorDetail... 查看详情

模型层单表操作(代码片段)

模型层单表操作单表操作例:1.单表的查询1.单表查询所有用户:models.Book.objects.all()得到的是queryset对象(当成列表),列表里面,一个一个的对象[user1,user2]?2.render(request,‘booklist.html‘,‘book_list‘:ret)?3.模板里:%foruserinbook_list%#要循环的... 查看详情

django基础五之django模型层之关联管理器(代码片段)

...ForeignKey关系的“另一边”。像这样:12345678from django.db import models class Reporter(models.Model):    #...    pass class Article(models.Model):    reporter = models.Forei... 查看详情

django模型层之单表操作(代码片段)

Django模型层之单表操作一、ORM简介我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增、删、改、查),而一旦谈到数据的管理操作,就需要用到数据库管理软件,例如mysql、oracle、MicrosoftSQLServ... 查看详情

django模型层:单表操作(代码片段)

一ORM简介 对象关系映射(ObjectRelationalMapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术 查询数据层次图解:如果操作mysql,ORM是在pymysq之上又进行了一层封装MVC或者MTV框架中包括... 查看详情

django基础之djangoorm单表操作(代码片段)

...g,简称ORM)(将来会学一个sqlalchemy,是和他很像的,但是django的orm没有独立出来让别人去使用,虽然功能比sqlalchemy更强大,但是别人用不了)类对象--->sql--->pymysql--->mysql服务端--->磁盘,orm其实就是将类对象的语法翻译成... 查看详情

django之模型层&orm操作(代码片段)

 一.单表查询:     1.在模型层创建模型表:fromdjango.dbimportmodels#Createyourmodelshere.#单表查询表classUser(models.Model):name=models.CharField(max_length=32)age=models.IntegerField()registe 查看详情

django之路

Django基础Django——简介Django——web框架简介浅析uWSGI、uwsgi、wsgiDjango——url(路由)配置Django——模板层Django——视图层Django——模型层之单表Django——模型层之多表操作Django——form组件Django——AjaxDjango——会话追踪技术Django... 查看详情

django框架05/orm单表操作

目录Django框架05/orm单表操作昨日内容回顾今日内容orm单表操作对象关系映射(objectrelationalmapping)1.orm介绍2.增:3.时间问题4.删5.改6.批量插入--bulk_create7.查询api8.基于双下划线的模糊查询--filter双下划线查询9.总结总结1总结2Django框架05... 查看详情

django目录

Djangodjango——简介django——web框架简介django——url(路由)配置 django——模板层django——视图层django——模型层之单表django——模型层之多表操作django&mda 查看详情

djangoorm-单表实例(代码片段)

阅读本章节前你需要先阅读了Django模型进行基础配置及了解常见问题的简介方案。接下来我们重新创建一个项目app01:django-admin.pystartprojectapp01接下来在settings.py中找到INSTALLED_APPS这一项,如下:INSTALLED_APPS=(‘django.contrib.admin‘,‘dj... 查看详情

django——模型基础

查询操作是Django的ORM框架中最重要的内容之一。建立模型、保存数据为的就是在需要的时候可以查询得到数据本文的内容基于如下的一个博客应用模型:classUser(models.Model):"""用户表"""username=models.CharField(max_length=32)password=models.Char... 查看详情

django

Django简介下载安装  Windows下安装Django  Linux上安装DjangoWEB应用HTTP协议web应用项目路由控制视图层模板层模型层:单表操作,多表操作,常用字段和参数组件:Django与Ajax,分页器组件,forms组件,cookie与session组件,中间件组... 查看详情

django学习第6篇:django之orm单表操作(增删改查)(代码片段)

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

django系列

  Django框架简介  Django静态文件  Djangorequest对象与ORM简介  Django路由系统  Django之视图层  Django之模板层  Django的settings源码分析Django表模型操作  Django表关系的创建  Django单表查询  Django多表、跨表、聚... 查看详情

django--基础--djangoorm常用查询语法及进阶(代码片段)

...询锁和事务锁事务其他鲜为人知的操作(有个印象即可)DjangoORM执行原生SQLQuerySet方法大全Django终端打印SQL语句在Python脚本中调用Django环境1,一般操作官网 查看详情

django之单表操作(代码片段)

1.查询方法:<1>all():查询所有结果<2>filter(**kwargs):它包含了与所给筛选条件相匹配的对象<3>get(**kwargs):返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出... 查看详情