Django orm使用教程

Django orm使用教程

标签(空格分隔): Django orm


前言

orm使用五步走:

  1. 在settings文件中设置数据库连接配置
  2. 创建app
  3. 在models里面创建类
  4. 使用python make migrations命令将改变登记在小本本上面
  5. 使用python migrate命令将改动同步到数据库中

数值类型(常用)

  1. CharField varchar类型:name = models.CharField(max_length=32)
  2. IntegerField

    int类型:age = models.IntegerField()

  3. DecimalField

    decimal类型: money = models.DecimalField(max_digits=5,decimal_places=2,default=9.9)

  4. DateField

    Date类型:publish_date = models.DateField(auto_now_add=True)

  5. AutoField 一般用于id字段实现id字段的自增属性,在Django的orm中可以不用加id字段,orm在创建表的时候会自动将该字段添加到表中
  6. 实现ENUM数据类型的方式:
    gender_choice=((1,‘男‘),(2,‘女‘))
    gender = models.SmallIntegerField(choices=gender_choice,default=1)

    表的三种关系

    1.多对一:使用外键关联:ForeignKey

    2.多对多:使用一张新的表:在 orm中可以直接使用ManyToManyField创建

    3.一对一:在外键的基础上增加unique属性

orm之增删改

  • create():创建一个新对象,并保存对象
import datetime
models.author.objects.first().book_set.create(title=‘番茄物语‘)
  • add():把指定的model对象添加到关联对象集中
author_objs = models.author.objects.filter(id__lt=3)
models.book.objects.first().author.add(*author_objs)

-set():更新model对象的关联对象

book_obj = models.book.objects.first()
book_obj.authors.set([2,3])

-remove():从关联对象集中移除执行的model对象

book_obj = models.book.objects.first()
book_obj.authors.remove(3)

-clear():从关联对象集中移除一切对象

book_obj = models.book.objects.first()

book_obj.authors.clear()

必知必会13条

  1. all(): 查询所有结果
  2. filter(**kwargs) 包含了与所筛选条件相匹配的对象
  3. get(**kwargs) 返回与所筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误
  4. exclude(**kwargs) 返回与筛选条件不匹配的对象
  5. values(*field) 返回一个ValueQuerySet,运行后得到的并不是一系列model的实例化对象,得到的而是一个可迭代字典对象
  6. values_list(*field) 与values()非常相似,它返回的是一个元祖序列,而values()返回的是一个字典序列
  7. order_by(*field) 查询结果排序
  8. revers() 对查询结果反向排序,reverse()通常只能在具有已定义序列顺序的QuerySet上调用
  9. distinct() 从返回结果中剔除重复记录
  10. 返回数据库中匹配查询(QuerySet)的对象数量
  11. first() 返回第一条记录
  12. last() 返回最后一条记录
  13. exists() 如果QuerySet包含数据,就返回True,否则返回False

原文地址:https://www.cnblogs.com/guanzhicheng/p/9206151.html

时间: 2024-08-29 21:04:34

Django orm使用教程的相关文章

数据库表反向生成(二)django ORM inspectdb

在前一篇我们说了,mybatis-generator反向生成代码. 这里我们开始说如何在django中反向生成mysql model代码. 我们在展示django ORM反向生成之前,我们先说一下怎么样正向生成代码. 正向生成,指的是先创建model.py文件,然后通过django内置的编译器,在数据库如mysql中创建出符合model.py的表. 反向生成,指的是先在数据库中create table,然后通过django内置的编译器,生成model代码. 1.准备工作 创建django工程以及

Django ORM模型的一点体会

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 使用Python的Django模型的话,一般都会用它自带的ORM(Object-relational mapping)模型.这个ORM模型的设计比较简单,学起来不会特别花时间.不过,Django的ORM模型有自己的一套语法,有时候会觉得别扭.这里聊一下我自己的体会. 模型设计 这一部分算处理得比较好的部分.Django的数据模型的建立过程很简单,就是继承django.db.models中的Model类,

django orm 批量存储数据

项目中 需要大量数据的保存操作,每条执行save操作效率太低,在官网上找到bull_create 的批量存储方式,效率提高很多 Insert in bulk When creating objects, where possible, use the bulk_create() method to reduce the number of SQL queries. For example: Entry.objects.bulk_create([ Entry(headline="Python 3.

Python+Django+SAE系列教程16-----cookie&session

本章我们来讲解cookie和session ,这两个东西相信大家一定不陌生,概念就不多讲了,我们直接来看其用法,首先是cookie,我们在view中添加三个视图,一个是显示cookie的,一个是设置cookie的,如下: def show_cookie(request): if "MyTestCookie" in request.COOKIES: return HttpResponse("Cookie[MyTestCookie]的内容是: %s" % request

Python+Django+SAE系列教程11-----request/pose/get/表单

表单request,post,get 首先我们来看看Request对象,在这个对象中包含了一些有用的信息,学过B/S开发的人来说这并不陌生,我们来看看在Django中是如何实现的: 属性/方法 说明 举例 request.path 除域名以外的请求路径,以正斜杠开头 "/hello/" request.get_host() 主机名(比如,通常所说的域名) "127.0.0.1:8000" or"www.example.com" request.g

django orm 关联表查询

django orm 关联表数据,即sql的多表查询 例如两个表: Apply表中定义了字段position为foreignkey指向job表的id字段, 1.通过job表查找子表apply的字段信息: job.objects.values( 'id', 'job_type', 'apply__date_created') 连接符为小写的子表tablename+双下线+子表字段名即:apply__date_created 表示寻找Apply表中的date_created字段 等价于后台的SQL:

django orm中 get 与filter的区别

django orm中 get 与filter的区别: 以前误以为get与filter的区别仅仅是filter返回多条,而get仅支持一条记录,直到使用related_name属性 才发现,两者的差异远不止如此,最本质的区别是 filter返回的值是一个queryset对象, 而get 返回值是一个定义的model对象, 使用get 返回的结果去访问子表对象可以成功,而使用filter就会出错, 是因为queryset 对象没有realtaed_name属性,无法回溯到子表

[Django]orm中的外键级联删除

这里的系统环境为django1.6   os为win7 今天有个需求说的是添加一个地区表,然后用外键和几个非常重要的实体表来做关联(地区表作为其他表的外键),写完地区的删除操作的时候,测试了下代码,功能正常.可是眼睛移动到控制台输出的时候傻了 connexesql ->DELETE FROM `mngm_device` WHERE `mngm_device`.`area_id` IN (%s, %s, %s) connexesql ->DELETE FROM `ad_ad` WHERE `ad

django orm总结

目录1.1.1 生成查询1.1.2 创建对象1.1.3 保存修改的对象1.1.4 保存 ForeignKey 和 ManyToManyField 字段1.1.5 检索对象1.1.6 检索所有的对象1.1.7 过滤检索特定对象1.1.8 链接过滤1.1.9 过滤结果集是唯一 1.2.1 结果集是延迟的 1.2.2 其他的QuerySet方法1.2.3 限制 QuerySets1.2.4 字段查找1.2.5 跨关系查询1.2.6 过滤器可参考模型字段1.2.7 缓存查询集1.2.8 比较对象1.2.