zoukankan      html  css  js  c++  java
  • Django----ORM 对表单的增删改查

    ---恢复内容开始---

    ---------------------------------

    ---------- 单表操作

    ---------------------------------

    向数据库的表单中添加内容的两种方式

    def addbook(request):
        # b=Book(name="python基础",price=99,author="yuan",pub_date="2017-12-12")
        # b.save()      #添加内容的方式一
    
        Book.objects.create(name="老男孩shell",price=78,author="oldboy",pub_date="2016-12-14")
        # 方式二
        
        return HttpResponse("添加成功")

    修改表单内容的两种方式

    def update(request):
        #表记录的修改方式一 推荐用这种方式
        # Book.objects.filter(author="yuan").update(price="999")
    
        #表记录的修改方式二
        b = Book.objects.get(author="oldboy")
        b.price=120
        b.save()
        return HttpResponse("修改成功!")

    删除表单内容

    def delete(request):
    
        Book.objects.filter(author="oldboy").delete()
    
        return HttpResponse("删除成功!")

    ---------------------------------

    Django查看原生SQL语句logging配置----

    --------------------------------------

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'console':{
                'level':'DEBUG',
                'class':'logging.StreamHandler',
            },
        },
        'loggers': {
            'django.db.backends': {
                'handlers': ['console'],
                'propagate': True,
                'level':'DEBUG',
            },
        }
    }

    表记录的查询

    def select(request):
    
        # book_list=Book.objects.all()  #查询列表所有信息
        # print(book_list)
        # print(book_list[0])
    
        # book_list=Book.objects.all()[:3]  #取前三条
        # book_list=Book.objects.filter(id=2)  #得到的结果是一个集合,只不过只有一个id=2的对象
        # book_list=Book.objects.all()[::2]  #两个两个取,或者说是取一个,隔一个
        # book_list=Book.objects.first()  #取第一个
        # book_list=Book.objects.last()  #取最后一个
        # book_list=Book.objects.get(id=2)  #取一个id=2的对象,,如果按照作者取,加入有两本书有同一个作者,会报错
    
        ret = Book.objects.filter(author="yuan").values("name","price") #得到的结果是字典
        ret2 = Book.objects.filter(author="yuan").values_list("name","price") #得到的结果是元祖
        print(ret)
        print(ret2)
    
        #book_list=Book.objects.all().values("name).distinct() #去重
        book_count=Book.objects.all().values("name").distinct().count()
        print(book_count)
    
        #万能的双下划线 __
        # book_list=Book.objects.filter(price__gt=50).values("name","price")  #__gt是大于,__lt小于
        book_list=Book.objects.filter(name__icontains="P").values("name","price")  #__icontains 包含大小写p.contains只包含P
    
    
    
    
        return render(request,"index.html",{"book_list":book_list})

    多表操作(一对多):

    添加记录:

    Book.objects.create(name="linux运维",price=77,pub_date="2017-12-12",publish_id=2) #方式一

    publish_obj=Publish.objects.filter(name="人民出版社")[0]
    Book.objects.create(name="GO",price=23,pub_date="2017-5-12",publish=publish_obj)#方式二

    查询记录(通过记录):

      正向查询:

       book_obj=Book.objects.get(name="python")

       pbu_obj = book_obj.publish------>书籍对象对应的出版社对象

       pub_obj.name

      反向查询:

       pub_obj = Publish.objects.filter(name = "人民出版社")

       print(pub_obj.book_set.all().values("name","price"))

    查询记录(filter values 双下划线__)

      ret = Book.objects.filter(publish__name="人民出版社").values("name","price")
      print(ret)

      

    ret = Book.objects.filter(publish__name="人民出版社").values("name","price")
    print(ret)

    #求Python这本书的出版社的名字
    ret2 = Publish.objects.filter(book__name="Python").values("name")
    print(ret2)

    ret3=Book.objects.filter(name="python").values("publish__name")
    print(ret3)


    #在北京的出版社出版过的书名
    ret4= Book.objects.filter(publish__city="北京").values("name")
    print(ret4)
    #JAVA 这本书的出版社的所在城市
    ret5 = Publish.objects.filter(book__name="JAVA").values("city")
    print(ret5)

    ---------------------------------------------------------------------

    多表操作(多对多)

      创建多对多关系:authors=models.ManyToManyField("Author")  (推荐)

      书籍对象的所有关联作者  obj=book_obj.authors.all()

          绑定多对多关系      添加关系obj.add(*Queryset)                                 解除关系obj.remove(author_obj)

      手动创建第三张表

    # class Book_Author(models.Model):
    # book=models.ForeignKey("Book",on_delete=models.CASCADE)
    # author=models.ForeignKey("Author",on_delete=models.CASCADE)


    掌握:通过 filter values (双下划线)进行多对多的关联查询 (形式和一对多一样)



        

      

    多表查询使用聚合函数前需要先倒入:

    from django.db.models import Avg,Min,Sum,Max,Count




  • 相关阅读:
    c语言中while((c=getchar())!=EOF)怎样才能输入EOF是循环中断
    Python学习笔记之装饰器原理
    Ubuntu中使用pip3报错
    Django配置xadmin后台模板之坑(一)
    ES6之字符串扩展
    Koa中设置中文Cookie值
    node中中间件body-parser的实现方式
    CSS笔记之Grid网格系统
    从0开始搭建vue+webpack脚手架(四)
    从0开始搭建vue+webpack脚手架(三)
  • 原文地址:https://www.cnblogs.com/lhqlhq/p/9137891.html
Copyright © 2011-2022 走看看