zoukankan      html  css  js  c++  java
  • django中orm的简单操作

    数据库模型

    from django.db import models
    
    # Create your models here.
    from django.db import models
    
    # Create your models here.
    
    
    class Author(models.Model):
        nid = models.AutoField(primary_key=True)
        name=models.CharField( max_length=32)
        age=models.IntegerField()
    
        # 与AuthorDetail建立一对一的关系
        authorDetail=models.OneToOneField(to="AuthorDetail",on_delete=models.CASCADE)
    
    class AuthorDetail(models.Model):
    
        nid = models.AutoField(primary_key=True)
        birthday=models.DateField()
        telephone=models.BigIntegerField()
        addr=models.CharField( max_length=64)
    
    class Publish(models.Model):
        nid = models.AutoField(primary_key=True)
        name=models.CharField( max_length=32)
        city=models.CharField( max_length=32)
        email=models.EmailField()
    
    
    class Book(models.Model):
    
        nid = models.AutoField(primary_key=True)
        title = models.CharField( max_length=32)
        publishDate=models.DateField()
        price=models.DecimalField(max_digits=5,decimal_places=2)
    
        # 与Publish建立一对多的关系,外键字段建立在多的一方
        publish=models.ForeignKey(to="Publish",to_field="nid",on_delete=models.CASCADE)
        # 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表
        authors=models.ManyToManyField(to='Author',)
    models.py

    查询语句

    from django.shortcuts import render,HttpResponse
    
    # Create your views here.
    
    
    from app01 import models
    
    def query(request):
    
        # #####################基于对象查询(子查询)##############################
        #                按字段(publish)
        # 一对多   book  ----------------->  publish
        #               <----------------
        #                 book_set.all()
    
        # 正向查询按字段:
    
        # 查询python这本书籍的出版社的邮箱
    
        # python=models.Book.objects.filter(title="python").first()
        # print(python.publish.email)
    
    
        # 反向查询按     表名小写_set.all()
    
        # 苹果出版社出版的书籍名称
    
        # publish_obj=models.Publish.objects.filter(name="苹果出版社").first()
        # for obj in publish_obj.book_set.all():
        #     print(obj.title)
    
        #                按字段(authors.all())
        # 多对多   book  ----------------------->  author
        #               <----------------
        #                  book_set.all()
    
    
        # 查询python作者的年龄
        # python = models.Book.objects.filter(title="python").first()
        # for author in python.authors.all():
        #     print(author.name ,author.age)
    
        # 查询alex出版过的书籍名称
    
        # alex=models.Author.objects.filter(name="alex").first()
        # for book in alex.book_set.all():
        #     print(book.title)
    
        #                  按字段 authorDetail
        # 多对多   author  ----------------------->  authordetail
        #                <----------------
        #                  按表名  author
    
    
        #查询alex的手机号
        # alex=models.Author.objects.filter(name='alex').first()
        # print(alex.authorDetail.telephone)
    
    
        # 查询家在山东的作者名字
    
        # ad_list=models.AuthorDetail.objects.filter(addr="shandong")
        #
        # for ad in ad_list:
        #     print(ad.author.name)
    
    
    
        '''
        对应sql:
           select publish_id from Book where title="python"
           select email from Publish where nid =   1
        
        
        '''
    
    
    
    
        # #####################基于queryset和__查询(join查询)############################
    
        # 正向查询:按字段  反向查询:表名小写
    
    
        # 查询python这本书籍的出版社的邮箱
        # ret=models.Book.objects.filter(title="python").values("publish__email")
        # print(ret.query)
    
        '''
        select publish.email from Book 
        left join Publish on book.publish_id=publish.nid 
        where book.title="python"
        '''
    
        # 苹果出版社出版的书籍名称
        # 方式1:
        ret1=models.Publish.objects.filter(name="苹果出版社").values("book__title")
        print("111111111====>",ret1.query)
        #方式2:
        ret2=models.Book.objects.filter(publish__name="苹果出版社").values("title")
        print("2222222222====>", ret2.query)
    
        #查询alex的手机号
        # 方式1:
        ret=models.Author.objects.filter(name="alex").values("authorDetail__telephone")
    
        # 方式2:
        models.AuthorDetail.objects.filter(author__name="alex").values("telephone")
    
        # 查询手机号以151开头的作者出版过的书籍名称以及书籍对应的出版社名称
    
        ret=models.Book.objects.filter(authors__authorDetail__telephone__startswith="151").values('title',"publish__name")
        print(ret.query)
    
    
        return HttpResponse("OK")
  • 相关阅读:
    阅读 video in to axi4-stream v4.0 笔记
    python 字符串操作
    python 基本语句
    Python 算术运算符
    芯片企业研报阅读
    量化分析v1
    基于MATLAB System Generator 搭建Display Enhancement模型
    System Generator 生成IP核在Vivado中进行调用
    FPGA 中三角函数的实现
    System Generator 使用离散资源
  • 原文地址:https://www.cnblogs.com/ttyypjt/p/10782369.html
Copyright © 2011-2022 走看看