返回顶部
首页 > 资讯 > 前端开发 > node.js >怎么理解Django ORM操作
  • 242
分享到

怎么理解Django ORM操作

2024-04-02 19:04:59 242人浏览 八月长安
摘要

本篇内容主要讲解“怎么理解Django ORM操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解DjanGo ORM操作”吧!表结构设计还是从实际角度出

本篇内容主要讲解“怎么理解Django ORM操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解DjanGo ORM操作”吧!

表结构设计

还是从实际角度出发。

假设,现在我需要设计一个简单的图书管理系统,是那种买的书,不是图书馆的书!!!

我想了想,首先,肯定有一个图书表,专门存放图书的信息,最起码是这样的。

怎么理解Django ORM操作

但是又想了想,似乎我的书想发布,肯定是需要一个出版社帮我发布的,我肯定不能自己发布所以是这样子的。

怎么理解Django ORM操作

又想了想,书肯定是人写的,肯定要有作者,所以还需要一个作者表,应该是这样子的。

怎么理解Django ORM操作

又想了想,这一本书如果让一般人编,难度有点大啊,一般都是多人一起完成的,所以大概还有这样一张表。

怎么理解Django ORM操作

其实,上述漏点了一个东西,图书需要归属一个出版社的,所以,最终表结构应该是这样的!

怎么理解Django ORM操作

Django models代码

from django.db import models   # 作者表 class Author(models.Model):     name = models.CharField(verbose_name="作者姓名", max_length=8)     age = models.IntegerField(verbose_name="作者年龄")     phone = models.CharField(verbose_name="作者联系方式", max_length=11)   # 出版社 class Publish(models.Model):     title = models.CharField(verbose_name="出版社名称", max_length=16)     phone = models.CharField(verbose_name="出版联系方式", max_length=11)   # 图书 class Book(models.Model):     title = models.CharField(verbose_name="书名", max_length=32)     price = models.DecimalField(verbose_name="价格", max_digits=5, decimal_places=2)     PublishDate = models.DateField(verbose_name="初版日期")     publish = models.ForeignKey(to=Publish, verbose_name="所属出版社", on_delete=models.CASCADE)   # 图书Many作者 class BookManyAuthor(models.Model):     book = models.ForeignKey(to=Book, verbose_name="所属图书", on_delete=models.CASCADE)     author = models.ForeignKey(to=Author, verbose_name="所属作者", on_delete=models.CASCADE)

Mysql.sql

数据同上述excel图一致!

WEB_author.sql  web_book.sql  web_bookmanyauthor.sql  web_publish.sql

查询操作

本次采用单独使用Django ORM的方式,不需要将Django运行起来,所以也不需要写url什么的了!

前置导入

import os import django  # django_orm_demo为我的项目名称 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_orm_demo.settings") django.setup()  # 导入models一定要在 django.setup() 之后 from web import models

查询所有(all)

语法

models.<模型类>.objects.all()

例如:查询所有作者

author_list = models.Author.objects.all() print(author_list)

执行结果

怎么理解Django ORM操作

例如:查询所有图书,并且遍历详情

book_list = models.Book.objects.all() for book in book_list:     print(book.title, book.price, book.PublishDate, book.publish)

执行结果

怎么理解Django ORM操作

查询指定条件(filter)

语法

models.<模型类>.objects.filter(<条件>)

例如:查询张三的信息

author = models.Author.objects.filter(name="张三") print(author) print(author.name)

执行结果

怎么理解Django ORM操作

似乎你发现了个错误,'QuerySet' object has no attribute 'name'。

这是因为filter(<条件>)查询出来的,可能不止一个值,就像name=张三,可能有很多张三!

所以获取的是一个列表,注意第一个红色圈圈,如果我明明知道就是一个值,也就像取第一个值,咋办?

first

通过first,拿到的就是第一个值,同时也是模型类对象

代码

author = models.Author.objects.filter(name="张三").first() print(author,type(author)) print(author.name,author.phone)

执行结果

怎么理解Django ORM操作

filter支持多条件

假设有俩张三

怎么理解Django ORM操作

如果我想取第二个张三咋办?

要是能写俩条件就好了比如这样name=张三 and age=22。

注:filter后面只能跟filter或者first,filter里面的条件都是and查询

代码

# filter里面多个条件是and查询 author = models.Author.objects.filter(name="张三",age=22).first() print(author,type(author)) print(author.name,author.phone)

执行结果

怎么理解Django ORM操作

常用filter条件列表

熟悉Mysql的可能都知道,有=,<,<=,like等各种范围查询,同样,Django也同样支持!

filter通过__来构造条件

# 包含三 字段__contains="三" # 原生SQL条件:where 字段 like "%三%" # 以三开头 字段__startswith="三" # 原生SQL条件:where 字段 like "三%" # 以三结尾 字段__startswith="三" # 原生SQL条件:where 字段 like "%三" # 为空 字段__isnull=True # 原生SQL条件:where 字段 IS NULL # 不为空 字段__isnull=False # 原生SQL条件:where 字段 IS NOT NULL # in 字段__in=[1,2,3] # 原生SQL条件:where 字段 IN (1, 2, 3) # > 字段__gt=1 # 原生SQL条件:where 字段 > 1 # >= 字段__gte=1 # 原生SQL条件:where 字段 >= 1 # < 字段__lt=1 # 原生SQL条件:where 字段 < 1 # <= 字段__lte=1 # 原生SQL条件:where 字段 <= 1 # 日期字段,年 日期字段__year=2020 # 原生SQL条件:where 日期字段 BETWEEN 2020-01-01 AND 2020-12-31 # 日期字段,月 日期字段__month=3 # 原生SQL条件:where EXTRACT(MONTH FROM 表名.日期字段) = 3 # 日期字段,天 日期字段__day=4 # 原生SQL条件:where EXTRACT(DAY FROM 表名.日期字段) = 4 # 时间比大小,|为或的意思 日期字段__gt|lt|...="2020-10-10" # 原生SQL条件:where 日期字段 > 2020-10-10 # 比大小还可以是时间类型 import datetime 日期字段__gt|lt|...=datetime.date(2020,10,10)# 同上 # 时间范围筛选 日期字段__range=("2020-01-01","2020-06-01") # 原生SQL条件:where 时间字段 BETWEEN 2020-01-01 AND 2020-06-01 日期字段__range=(datetime.date(2020,1,1),datetime.date(2020,6,1)) # 同上

get

其实当我们只需要获取一个值时,还可以使用get。

代码

author = models.Author.objects.get(name="李四") print(author,type(author)) print(author.name,author.phone)

执行结果

怎么理解Django ORM操作

但是这个get不太推荐使用,原因如下

  • 如果get条件获取了俩或俩以上的值,会报错。

  • 如果get条件获取不到值,还是会报错。

示例代码

author = models.Author.objects.get(name="张三") # error:get() returned more than one Author -- it returned 2!  author = models.Author.objects.get(name="不存在") # error:Author matching query does not exist. author = models.Author.objects.filter(name="不存在").first() # 结果:None

所以,推荐使用filter,如果确定只有一条,那就filter().first(),如果需要多条,遍历即可!

query

在某些特殊情况下,我们可能对于查询的结果感到有些意外!

可能需要看看原生SQL是啥,这时候需要用到query。

注:query只能用在filter()后面。

代码

sql = models.Author.objects.filter(name="李四").query print(sql)

执行结果

怎么理解Django ORM操作

到此,相信大家对“怎么理解Django ORM操作”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 怎么理解Django ORM操作

本文链接: https://lsjlt.com/news/84131.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么理解Django ORM操作
    本篇内容主要讲解“怎么理解Django ORM操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解Django ORM操作”吧!表结构设计还是从实际角度出...
    99+
    2024-04-02
  • 如何理解Django ORM操作
    这篇文章主要讲解了“如何理解Django ORM操作”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Django ORM操作”吧!查询聚合操作聚合操作...
    99+
    2024-04-02
  • 如何了解Django ORM操作
    本篇内容主要讲解“如何了解Django ORM操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何了解Django ORM操作”吧!查询操作对象.外键字段比如,我们拿到了一个书的信息,我们可以...
    99+
    2023-06-15
  • django--ORM的单表操作
    Django--ORM单表操作创建一个新的django项目项目目录结构:Django连接数据库配置重点:第一步:修改settings.py文件DATABASES = {     &...
    99+
    2023-01-30
    操作 django ORM
  • CMDB之Django 数据库ORM操作
    CMDB实现数据展示功能部分代码。 views.py def asset(request):     asset = Asset.ob...
    99+
    2024-04-02
  • django操作非ORM创建的表
    django--ORM连接已存在的表问题:django的ORM怎么连接已存在的表,然后进行增删查改操作?工作中会遇见很多二次开发的时候,表都是已经创建好的,用django的ORM进行二次开发,怎么操作数据库中的表呢下面介绍一种完美解决方案:...
    99+
    2023-01-30
    操作 django ORM
  • django的数据库ORM进阶操作
    1、数据库查询的三种方式 正向查询: (1)获取全部数据all     v1=models.UserInfo.objects.all().first()    #取出Querryset类型数据,里面是对象,需循环取出     v1.ut  ...
    99+
    2017-08-05
    django的数据库ORM进阶操作 数据库入门 数据库基础教程 数据库 mysql
  • Python Django ORM连表正反操作技巧
    一、A表男生,B表女生,C表关系 1通过A表查与某个男生有关系的所有女生 思想1:在A表中确认男生后,通过反查到C表,获取相关内容(QuerySet),然后再跨到B表获取所有女生信...
    99+
    2024-04-02
  • Django静态文件配置request对象方法ORM操作讲解
    目录django框架请求流程静态文件及相关配置请求方法request对象方法pycharm链接MySQLDjango链接MySQLDjango ORMORM语法ORM外键关联djan...
    99+
    2024-04-02
  • Django ORM 事务和查询优化的操作方法
    目录一、事务操作二、 ORM 惰性查询三、only与defer四、select_related与prefetch_related一、事务操作 模块 from django....
    99+
    2024-04-02
  • Python Django ORM 深潜:掌控数据库操作的艺术
    Django 对象关系映射器 (ORM) 是一个强大且灵活的工具,它允许 Django 开发人员以面向对象的方式与数据库交互。通过使用 ORM,开发人员可以将数据库表映射到 Python 类,并通过这些类来访问和操作数据库中的数据。 Dj...
    99+
    2024-04-02
  • Python中怎么操作 Django
    本篇文章为大家展示了Python中怎么操作 Django,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在开发的时候发现Python Django的模板创建表单的做法确实感到有比较大的局限性,不过自定...
    99+
    2023-06-17
  • Django视图之ORM数据库查询操作API的实例
    查询表记录 查询相关API 操作:models.表名.objects.方法() <BR>all(): 查询所有结果 filter(**kwargs): 它包含了与所给筛选条件...
    99+
    2022-06-05
    视图 数据库查询 实例
  • Django框架ORM操作数据库不生效问题示例解决方法
    目录问题描述定位过程 首先,我们怀疑是SQL语句拼装错误(比如ID不对),导致了删除不生效解决方案总结本文详细描述使用Django 的ORM框架操作PostgreSQL数据库删除不生...
    99+
    2023-01-07
    django orm操作数据库不生效 django orm框架操作
  • Django中ORM基本应用与原理解析
    目录1.ORM构建数据表2.数据迁移3.Model相关的概念与使用方法Model的组成部分Meta元数据类属性说明Field的通用字段选项基础字段类型关系字段类型多对一一对一多对多关...
    99+
    2024-04-02
  • Django 中的Timezone 处理操作
    Django 中的时区 在现实环境中,存在有多个时区。用户之间很有可能存在于不同的时区,并且许多国家都拥有自己的一套夏令时系统。所以如果网站面向的是多个时区用户,只以当前时间为标准开...
    99+
    2024-04-02
  • LINQ To SQL和ORM怎么理解
    这篇文章主要讲解了“LINQ To SQL和ORM怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“LINQ To SQL和ORM怎么理解”吧!LINQ To SQL和ORM的理解1、没...
    99+
    2023-06-17
  • go第三方库sqlx操作MySQL及ORM原理
    目录sqlx实战准备工作编写代码添加引用创建连接增删改查预处理语句数据库事务sqlx干了什么MustXXXNamedXXXXXXScansqlx是Golang中的一个知名三方库,其为...
    99+
    2024-04-02
  • PHP操作redis怎么理解
    PHP操作redis怎么理解,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-V...
    99+
    2023-06-04
  • 怎么在Django中对View进行操作
    本篇文章给大家分享的是有关怎么在Django中对View进行操作,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Django的View一个视图函数(类),简称视图,是一个简单的P...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作