zoukankan      html  css  js  c++  java
  • django_ORM

    数据表的创建:

           python manage.py makemigrations

           python manage.py migrate

    后台管理注册:

          admin.site.register()

    创建超级用户:

          python manage.py createsuperuser

    >>>models创建基本
    class Book(models.Model):
        name=models.CharField(max_length=20)
        price=models.IntegerField()
        p_date=models.DateField()
        author=models.CharField(max_length=32,null=False)
    
    class Author(models.Model):
        name=models.CharField(max_length=32)

    增删改查操作

    增
    方法一:
    b=Book(name="python",price=99,author="yuan",p_date="2017-12-12")
    b.save();
    方法二:
    Book.objects.create(name="老男孩",price=99,author="yuan",p_date="2017-12-12")        #推荐************
    删
    Book.objects.filter(author="alex").delete()
    改
    方法一:
    Book.objects.filter(author="yuan").updat(price=109)   #推荐************
    方法二:
    b=Book.objects.get(author="alex")
    b.price=120
    b.save()
    查
    Book.objects.filter(id=2) #拿到id=2的结果
    Book.objects.filter(id=2).values("name","price")  #拿到一个列表 内部是一个个字典
    Book.objects.filter(id=2).values_list("name","price")    #拿到一个列表 内部是一个个元祖
    Book.objects.get(id=2) #只能取到一条记录才不会报错
    Book.objects.first() #拿到第一条结果
    Book.objects.last() #拿到最后一条结果
    Book.objects.all() #拿到所有结果
    Book.objects.all()[::2] #步长为2
    Book.objects.exclude(id=2) #拿到除id=2数据以外的结果
    Book.objects.all().values("name").dictinct()    #去除name字段重复的结果
    Book.objects.all().values("name").dictinct().count()    #去除name字段重复的结果之后的数条数  
    ##支持切片操作
    Book.objects.all()[::-1] #拿到所有结果倒叙
    Book.objects.all()[::2] #步长为2
    
    #模糊查询
    Book.objects.all(price__gt=50).values()      #查询price>50的数据
    Book.objects.filter(price__gt=50).values()    
    Book.objects.filter(name__contains="p").values()      #查询name字段中含有p的    icontains="p"(不区分大小写)   
    __gt(>)
    __gte(>=)
    __lt(<)
    __lte(<=)
    __exact(=)

    一对多(ForeignKey):外键建立在多的一方

    
    

    views

         #反向查询
    方法三:
    
    ret = Book.objects.filter(publish__name="宁波出版社").values()
    print(ret)                                                   #正向查询
    #python这本书出版社的名字
    方法一:
    ret = Book.objects.filter(name="python").values("publish__name") #通过book查找
    print(ret)

    方法二:
    ret = Publish.objects.filter(book__name="python").values("name") #通过publish查找
    print(ret)

    通过外键渲染到模板

    >>>models
    
    class Student(models.Model):
        student_id = models.IntegerField()
        student_name = models.CharField(max_length=10)
        student_sex = models.CharField(max_length=5)
        student_boss = models.ForeignKey('Teacher',on_delete=models.CASCADE)
    
    class Teacher(models.Model):
        teacher_name = models.CharField(max_length=5)
    
    >>>views
    
    def demo(request):
        student_list = Student.objects.all()
        return render(request,'demo.html',locals())
    
    >>>html
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        {% for item in student_list %}
            <p>{{ item.student_boss.teacher_name }}</p>
        {% endfor %}
    </body>
    </html>

    多对多(ManyToManyField):

    书籍对象的关联作者 obj=book_obj.author.all()
    绑定多对多的关系 obj=add()
              obj.remove(author_obj)

    聚合函数使用

    from django.db.models import Avg,Min,Sum,Max   #需要导入views

    ret = Book.objects.all().aggregate(Min("price"))      #聚合函数的使用
    print(ret)

    ret = Book.objects.filter(author__name="作者1").aggregate(Sum("price"))  #过滤信息后查询
    print(ret)

    # F 和 Q 使用查询条件的值,专门取对象中某列值的操作

    # from django.db.models import F
    # models.Tb1.objects.update(num=F('num')+1)

    # Q 构建搜索条件
        from django.db.models import Q
    
        #1 Q对象(django.db.models.Q)可以对关键字参数进行封装,从而更好地应用多个查询
        q1=models.Book.objects.filter(Q(title__startswith='P')).all()
        print(q1)#[<Book: Python>, <Book: Perl>]
    
        # 2、可以组合使用&,|操作符,当一个操作符是用于两个Q的对象,它产生一个新的Q对象。
        Q(title__startswith='P') | Q(title__startswith='J')
    
        # 3、Q对象可以用~操作符放在前面表示否定,也可允许否定与不否定形式的组合
        Q(title__startswith='P') | ~Q(pub_date__year=2005)
    
    
  • 相关阅读:
    操作系统:进程同步
    操作系统:线程的概念
    操作系统:进程的概念与控制
    操作系统:操作系统概述
    CTF-WEB:攻防世界 ics-05(preg_replace() 函数 /e 漏洞)
    《剑指 Offer》学习记录:题 11:旋转数组的最小数字
    《剑指 Offer》学习记录:题 28:对称二叉树
    Linux为什么不是硬实时
    普通线程和内核线程
    linux内核栈和用户栈
  • 原文地址:https://www.cnblogs.com/yzcstart/p/10644957.html
Copyright © 2011-2022 走看看