字段类型

  1. # 自增长
  2. Auto = models.AutoField()
  3. BigAuto = models.BigAutoField()
  4. # 二进制
  5. Binary = models.BinaryField()
  6. # 布尔型
  7. Boolean = models.BooleanField()
  8. NullBoolean = models.NullBooleanField()
  9. # 整型
  10. PositiveSmallInteger = models.PositiveSmallIntegerField() #正整数 5个字节
  11. SmallInteger = models.SmallIntegerField() # 整数 6个字节
  12. PositiveInteger = models.PositiveIntegerField() # 正整数 10个字节
  13. Integer = models.IntegerField() # 整数 11个字节
  14. BigInteger = models.BigIntegerField() # 整数 20个字节
  15. # 浮点型
  16. Float = models.FloatField()
  17. Decimal = models.DecimalField() # 指定总位数和小数位数
  18. # 字符串
  19. Char = models.CharField() # 指定最大长度 数据库对应varchar
  20. Text = models.TextField() # 不限长度 数据库对应longtext
  21. # 时间日期类型
  22. Date = models.DateField()
  23. DateTime = models.DateTimeField(
  24. Duration = models.DurationField() # 持续时间,数据表中为int,python中timedelta实现
  25. # 其他字段
  26. Email = models.EmailField()
  27. Image = models.ImageField()
  28. File = models.FileField()
  29. FilePath = models.FilePathField()
  30. URL = models.URLField()
  31. UUID = models.UUIDField()
  32. GenericIPAddress = models.GenericIPAddressField() # IPv4或者IPv6

字段参数

  1. # 共有参数
  2. db_column #字段名
  3. primary_key #是否为主键
  4. verbose_name #别名
  5. unique #是否添加唯一约束
  6. help_text #帮助信息
  7. editable #是否可编辑
  8. null #数据库是否可为空
  9. blank #表单中是否可为空
  10. db_index #是否添加索引
  11. # 特殊参数
  12. Decimal = models.DecimalField(max_digits=4, decimal_places=2) # 总共4位,其中小数点2位 11.22 16.14
  13. Date = models.DateField(unique_for_date=True, auto_now=True) # 日期唯一 自动更新修改日期
  14. DateTime = models.DateTimeField(unique_for_month=True, auto_now_add=True) # 月份唯一 自动更新添加日期
  15. Char = models.CharField(max_length=100) # 最大长度
  16. # 关系参数
  17. one2one = models.OneToOneField(Test, related_name='one') # related_name 用于反向查询
  18. """on_delete 当一个被外键关联的对象被删除时,Django将模仿on_delete参数定义的SQL约束执行相应的操作
  19. 如下6种操作
  20. CASCADE: 模拟SQL语言中的ON DELETE CASCADE约束,将定义有外键的模型对象同时删除(该操作为当前版本Django-1.11默认操作)
  21. PROTECT: 阻止上面的删除操作,但是弹出ProtectedError异常
  22. SET_NULL: 将外键字段设为null,只有当字段设置了null=True时,方可使用
  23. SET_DEFAULT: 将外键字段设为默认值,只有当字段设置了default参数时,方可使用
  24. DO_NOTHING: 什么也不做
  25. SET(): 设置为一个传递给SET()的值或者一个回调函数的返回值,注意大小写
  26. """
  27. foreign1 = models.ForeignKey(A, on_delete=models.CASCADE)
  28. foreign2 = models.ForeignKey(A, on_delete=models.PROTECT)
  29. foreign3 = models.ForeignKey(A, on_delete=models.SET_NULL, null=True, blank=True)
  30. foreign4 = models.ForeignKey(A, on_delete=models.SET_DEFAULT, default=0)
  31. foreign5 = models.ForeignKey(A, on_delete=models.DO_NOTHING)
  32. foreign6 = models.ForeignKey(A, on_delete=models.SET)

元数据

  1. # Model类中自带一个Meta子类用于定义模型元数据,元数据主要对数据表进行定义
  2. db_table = 'address' # 表名称
  3. ordering = ['pid'] # 排序
  4. verbose_name = '省市县地址信息' # 数据表别名
  5. verbose_name_plural = verbose_name # 复数别名
  6. abstract = True # 只用于继承而不生成数据表
  7. permissions = (('定义好的权限', '权限说明'),)
  8. class Task(models.Model):
  9. class Meta:
  10. #自定义权限
  11. permissions = (
  12. ("view_task", "Can see available tasks"),
  13. ("change_task_status", "Can change the status of tasks"),
  14. ("close_task", "Can remove a task by setting its status as closed"),
  15. )
  16. #用户检查自定义权限
  17. user.has_perm('app.view_task')
  18. managed = False # 是否纳入管理,False则不会生成表
  19. unique_together = ('address', 'note') # 联合唯一键
  20. app_label = 'courses' # INSTALLED_APPS中如果没有添加courses应用,这里需要指定
  21. db_tablespace # 定义数据库表空间的名字

查询接口

  1. Teacher.objects.all()
  2. Teacher.objects.get(nickname='Jack')
  3. Teacher.objects.filter(fans__gte=500)
  4. Teacher.objects.filter(fans__in=[666,123]) # 在列表内
  5. Teacher.objects.filter(nickname__icontains='A') icontains # 大小写不敏感
  6. Teacher.objects.all()[:1] # 切片
  7. Teacher.objects.all().order_by('-fans') # 排序
  8. Teacher.objects.filter(fans__gte=500).order_by('nickname') # 链式查询
  9. str(Teacher.objects.filter(fans__gte=500).order_by('nickname').query) # 查看原生SQL
  10. Student.objects.all().exclude(nickname='A同学' # 排除
  11. Student.objects.all().reverse() 反向排序 # models的Meta中需要添加ordering
  12. Student.objects.all().distinct() # 去重
  13. Student.objects.all().extra(select={'name': 'nickname'}) # 取别名
  14. Student.objects.all().defer() # 排除某些字段
  15. Student.objects.all().only() # 只获取某些字段
  16. Student.objects.all().values('nickname', 'hobby') # 获取字典形式的QuerySet 分组
  17. Student.objects.all().values_list('nickname', 'hobby') # 获取元组形式的QuerySet 分组
  18. Student.objects.all().values_list('nickname', flat=True) # 当只有一个字段时,flat=True可以将元组中的值直接放入列表中
  19. Student.objects.dates('created_at', 'month', order='DESC') # 根据时期获取查询集
  20. Student.objects.datetimes('created_at', 'month', order='DESC') # 根据时期获取查询集
  21. p_240 = Course.objects.filter(price__gte=240)
  22. p_260 = Course.objects.filter(price__lte=260)
  23. p_240.union(p_260) # 并集 innodb只支持并集
  24. p_240.intersection(p_260) # 交集
  25. p_240.difference(p_260) # 差集
  26. courses = Course.objects.all().select_related('teacher') # 一对一 多对一查询优化
  27. students = Student.objects.all().prefetch_related('course') # 一对多 多对多查询优化
  28. Teacher.objects.get(nick='Jack').course_set.all() # 反向查询
  29. Course.objects.values('teacher').annotate(vol=Sum('volume')) # 聚合计数
  30. Course.objects.values('teacher').annotate(pri=Avg('price')) # 聚合计数
  31. get_or_create()
  32. Course.objects.first()
  33. Course.objects.last()
  34. Course.objects.earliest() # Meta中添加get_latest_by
  35. Course.objects.latest() # Meta中添加get_latest_by
  36. Course.objects.in_bulk(['课程1', '课程2'])
  37. create()
  38. bulk_create()
  39. update_or_create()
  40. update()
  41. Course.objects.filter(title='test').delete()
  42. Course.objects.filter(title='test').exists()
  43. Course.objects.count()
  44. Course.objects.aggregate(Max('price'),Min('price'), Avg('price'), Sum('volume'))
  45. #F对象和Q对象
  46. #F对象:操作字段的数据
  47. Course.objects.update(price=F('price') - 11)
  48. Course.objects.filter(volume__lte=F('price')*10)
  49. #Q对象:结合AND,OR,NOT,|,~,&实现复杂的查询
  50. Course.objects.filter(Q(title__icontains='java') & Q(volume__gte=5000))

Django ORM整理的更多相关文章

  1. 9.14.16 Django ORM进阶用法

    2018-9-14 14:26:45 ORM 练习题   : http://www.cnblogs.com/liwenzhou/articles/8337352.html 2018-9-14 21:1 ...

  2. django orm总结[转载]

    django orm总结[转载] 转载地址: http://www.cnblogs.com/linjiqin/archive/2014/07/01/3817954.html 目录1.1.1 生成查询1 ...

  3. Django ORM - 001 - 外键表查询主表信息

    开始用Django做web开发,我想大家都会遇到同样的问题,那就是如何高效快速的查询需要的数据,MVC都很简单,但是ORM折腾起来就有些费时间,我准备好好研究下Django ORM,所以会有一个系列的 ...

  4. Django ORM 中的批量操作

    Django ORM 中的批量操作 在Hibenate中,通过批量提交SQL操作,部分地实现了数据库的批量操作.但在Django的ORM中的批量操作却要完美得多,真是一个惊喜. 数据模型定义 首先,定 ...

  5. Django ORM 查询管理器

    Django ORM 查询管理器 ORM 查询管理器 对于 ORM 定义: 对象关系映射, Object Relational Mapping, ORM, 是一种程序设计技术,用于实现面向对象编程语言 ...

  6. Django ORM模型的一点体会

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 使用Python的Django模型的话,一般都会用它自带的ORM(Object-relational ma ...

  7. 数据库表反向生成(二) Django ORM inspectdb

    在前一篇我们说了,mybatis-generator反向生成代码. 这里我们开始说如何在django中反向生成mysql model代码. 我们在展示django ORM反向生成之前,我们先说一下怎么 ...

  8. Django ORM那些相关操作

    一般操作 https://docs.djangoproject.com/en/1.11/ref/models/querysets/         官网文档 常用的操作 <1> all() ...

  9. django orm 及常用参数

    一些说明: 表myapp_person的名称是自动生成的,如果你要自定义表名,需要在model的Meta类中指定 db_table 参数,强烈建议使用小写表名,特别是使用MySQL作为后端数据库时. ...

随机推荐

  1. mac php7.3 安装扩展

    进入到PHP的目录 /bin/pecl install mongodb 其他扩展同理. 另外: Mac brew 安装的php的启动和停止: brew services stop phpbrew se ...

  2. typescript - 5.接口

    接口的作用: 在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到一种限制和规范的作用.接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据,也不 ...

  3. (6)Flask项目之会员注册页面

    一.添加注册页面的路由 修改app/home/views.py内容,追加注册("/regist/")页面的路由: # coding:utf8 from . import home ...

  4. 使用bert进行情感分类

    2018年google推出了bert模型,这个模型的性能要远超于以前所使用的模型,总的来说就是很牛.但是训练bert模型是异常昂贵的,对于一般人来说并不需要自己单独训练bert,只需要加载预训练模型, ...

  5. redis的相关原理

    一.AOF 二.RDB 三.哨兵

  6. Java 解析XML数据

    实例一:获取指定两个标签之间的数据 XML数据格式: <?xml version="1.0" encoding="utf-8"?> <soap ...

  7. [转自baidu]修正古人五行,《七行说》之提出

    一.论原五行相生.相克关系不妥之处: 祖国医学原“五行说”即金.木.水.火.土.在五行学说中说相生规律为:金生水:水生木:木生火:火生土:土生金.相克规律为:火克金:金克木:木克土:土克水:水克火.这 ...

  8. PKUWC2020自闭记

    我才听说PKU今年对我省高二要求CSP分数>450? 我似乎丧失了一个溜去隔壁的机会? 机会是不存在的qwq THUWC3个数据结构直接送人升天 Day1 T1:感觉相邻的k!个排列是同构的可以 ...

  9. Linux服务器安装rocketMQ单机消息队列

    首先下载rocketMQ 1.解压: > unzip rocketmq-all-4.3.0-source-release.zip > cd rocketmq-all-4.3.0/ > ...

  10. leetcode309 买卖股票

    一.穷举框架 首先,还是一样的思路:如何穷举?这里的穷举思路和上篇文章递归的思想不太一样. 递归其实是符合我们思考的逻辑的,一步步推进,遇到无法解决的就丢给递归,一不小心就做出来了,可读性还很好.缺点 ...