数据库模型

  1. from django.db import models
  2.  
  3. # Create your models here.
  4. from django.db import models
  5.  
  6. # Create your models here.
  7.  
  8. class Author(models.Model):
  9. nid = models.AutoField(primary_key=True)
  10. name=models.CharField( max_length=32)
  11. age=models.IntegerField()
  12.  
  13. # 与AuthorDetail建立一对一的关系
  14. authorDetail=models.OneToOneField(to="AuthorDetail",on_delete=models.CASCADE)
  15.  
  16. class AuthorDetail(models.Model):
  17.  
  18. nid = models.AutoField(primary_key=True)
  19. birthday=models.DateField()
  20. telephone=models.BigIntegerField()
  21. addr=models.CharField( max_length=64)
  22.  
  23. class Publish(models.Model):
  24. nid = models.AutoField(primary_key=True)
  25. name=models.CharField( max_length=32)
  26. city=models.CharField( max_length=32)
  27. email=models.EmailField()
  28.  
  29. class Book(models.Model):
  30.  
  31. nid = models.AutoField(primary_key=True)
  32. title = models.CharField( max_length=32)
  33. publishDate=models.DateField()
  34. price=models.DecimalField(max_digits=5,decimal_places=2)
  35.  
  36. # 与Publish建立一对多的关系,外键字段建立在多的一方
  37. publish=models.ForeignKey(to="Publish",to_field="nid",on_delete=models.CASCADE)
  38. # 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表
  39. authors=models.ManyToManyField(to='Author',)

models.py

查询语句

  1. from django.shortcuts import render,HttpResponse
  2.  
  3. # Create your views here.
  4.  
  5. from app01 import models
  6.  
  7. def query(request):
  8.  
  9. # #####################基于对象查询(子查询)##############################
  10. # 按字段(publish)
  11. # 一对多 book -----------------> publish
  12. # <----------------
  13. # book_set.all()
  14.  
  15. # 正向查询按字段:
  16.  
  17. # 查询python这本书籍的出版社的邮箱
  18.  
  19. # python=models.Book.objects.filter(title="python").first()
  20. # print(python.publish.email)
  21.  
  22. # 反向查询按 表名小写_set.all()
  23.  
  24. # 苹果出版社出版的书籍名称
  25.  
  26. # publish_obj=models.Publish.objects.filter(name="苹果出版社").first()
  27. # for obj in publish_obj.book_set.all():
  28. # print(obj.title)
  29.  
  30. # 按字段(authors.all())
  31. # 多对多 book -----------------------> author
  32. # <----------------
  33. # book_set.all()
  34.  
  35. # 查询python作者的年龄
  36. # python = models.Book.objects.filter(title="python").first()
  37. # for author in python.authors.all():
  38. # print(author.name ,author.age)
  39.  
  40. # 查询alex出版过的书籍名称
  41.  
  42. # alex=models.Author.objects.filter(name="alex").first()
  43. # for book in alex.book_set.all():
  44. # print(book.title)
  45.  
  46. # 按字段 authorDetail
  47. # 多对多 author -----------------------> authordetail
  48. # <----------------
  49. # 按表名 author
  50.  
  51. #查询alex的手机号
  52. # alex=models.Author.objects.filter(name='alex').first()
  53. # print(alex.authorDetail.telephone)
  54.  
  55. # 查询家在山东的作者名字
  56.  
  57. # ad_list=models.AuthorDetail.objects.filter(addr="shandong")
  58. #
  59. # for ad in ad_list:
  60. # print(ad.author.name)
  61.  
  62. '''
  63. 对应sql:
  64. select publish_id from Book where title="python"
  65. select email from Publish where nid = 1
  66.  
  67. '''
  68.  
  69. # #####################基于queryset和__查询(join查询)############################
  70.  
  71. # 正向查询:按字段 反向查询:表名小写
  72.  
  73. # 查询python这本书籍的出版社的邮箱
  74. # ret=models.Book.objects.filter(title="python").values("publish__email")
  75. # print(ret.query)
  76.  
  77. '''
  78. select publish.email from Book
  79. left join Publish on book.publish_id=publish.nid
  80. where book.title="python"
  81. '''
  82.  
  83. # 苹果出版社出版的书籍名称
  84. # 方式1:
  85. ret1=models.Publish.objects.filter(name="苹果出版社").values("book__title")
  86. print("111111111====>",ret1.query)
  87. #方式2:
  88. ret2=models.Book.objects.filter(publish__name="苹果出版社").values("title")
  89. print("2222222222====>", ret2.query)
  90.  
  91. #查询alex的手机号
  92. # 方式1:
  93. ret=models.Author.objects.filter(name="alex").values("authorDetail__telephone")
  94.  
  95. # 方式2:
  96. models.AuthorDetail.objects.filter(author__name="alex").values("telephone")
  97.  
  98. # 查询手机号以151开头的作者出版过的书籍名称以及书籍对应的出版社名称
  99.  
  100. ret=models.Book.objects.filter(authors__authorDetail__telephone__startswith="").values('title',"publish__name")
  101. print(ret.query)
  102.  
  103. return HttpResponse("OK")

django中orm的简单操作的更多相关文章

  1. 6月20日 Django中ORM介绍和字段、字段参数、相关操作

    一.Django中ORM介绍和字段及字段参数 二.Django ORM 常用字段和参数 三.Django ORM执行原生SQL.在Python脚本中调用Django环境.Django终端打印SQL语句 ...

  2. Django中ORM介绍和字段及其参数

    ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述 ...

  3. Django中ORM介绍和字段及字段参数 Object Relational Mapping(ORM)

    Django中ORM介绍和字段及字段参数   Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简 ...

  4. Django的ORM常用查询操作总结(Django编程-3)

    Django的ORM常用查询操作总结(Django编程-3) 示例:一个Student model: class Student(models.Model): name=models.CharFiel ...

  5. Django 的ORM 表间操作

    Django之ORM表间操作   之前完成了简单的数据库数据增加操作.这次学习更多的表间操作. 单表操作 增加 方式一 b = Book(title="Python基础", pub ...

  6. Django中ORM的使用

    Django中ORM的使用 ORM orm(object-relation-mapping)对象关系映射,即用对象来表示关系数据库中的表: 类 --> 表, 对象-->一行数据 对象的属性 ...

  7. Django中ORM创建表关系

    一:django中ORM创建表关系 ORM创建外键关系 1.表与表之间的关系 1.表与表之间的关系 一对多 一对一 多对多 2.操作目标条件: 图书表 出版社表 作者表 作者详情表 3.外键关联 一对 ...

  8. Django中ORM对数据库的增删改查

    Django中ORM对数据库数据的增删改查 模板语言 {% for line in press %} {% line.name %} {% endfor %} {% if 条件 %}{% else % ...

  9. Django中ORM实际应用

    1. Django中ORM的使用 1. 手动新建一个数据库 2. 告诉Django连接哪个数据库 settings.py里面配置数据库连接信息: # 数据库相关的配置项 DATABASES = { ' ...

随机推荐

  1. SQL 组内排序

    SELECT t_time, code, name, CL, row_number () OVER (partition BY t_time ORDER BY cl) AS 组内排名1, --T_ti ...

  2. 拼接sql

    String whereArgs = taskTable + " where 1=1 "; if (upCheck) { whereArgs += " and type ...

  3. hadoop开发环境部署——通过eclipse远程连接hadoop2.7.3进行开发

    一.前言 环境: 系统:centos6.5 hadoop版本:Apache hadoop2.7.3(Windows和centos都是同一个) eclipse版本:4.2.0(juno版本,window ...

  4. distributed lock manager (DLM)(分布式管理锁)

    A distributed lock manager (DLM) provides distributed software applications with a means to synchron ...

  5. devcloud 基础架构

           

  6. leetcode - database - 177. Nth Highest Salary (Oracle)

    题目链接:https://leetcode.com/problems/nth-highest-salary/description/ 题意:查询出表中工资第N高的值 思路: 1.先按照工资从高到低排序 ...

  7. p2408 不同子串个数

    传送门 分析 首先我们不难求出一共有多少子串 之后我们只需要减掉重复个数即可 于是我们对于每个后缀减去它跟它前一名的最长公共前缀即可 代码 #include<iostream> #incl ...

  8. [Training Video - 6] [File Reading] [Java] Read Excel File Using Apache POI API

    读取以下两种格式的Excel : *.xls  and *.xlsx 用Apache POI API来实现,需要用到 HSSF 和 XSSF 的类库 HSSF is the POI Project's ...

  9. CodeForces 342A Xenia and Divisors (水题)

    题意:给定 n 个数(小于等于7),让你把它分成 m 组,每组有三个数,且满足,a < b < c,并且 a 能整除 b,b 能整除 c. 析:对于这个题,因为题目说了是不大于7的,那么一 ...

  10. CSS 学习-文本 段落

    段落. 首行缩进 text-indent属性 比如缩进  <p style="text-indent: 2em;">这里是内容....</p> 这里是内容这 ...