ORM操作:

mysql> create database django_db charset utf8;  特别提示MYSQL数据库必须先创建数据库
Query OK, 1 row affected (0.03 sec)

https://docs.djangoproject.com/en/1.10/

设置数据库表:多对多字段设置默认值为空时--无效
WARNINGS:
bbs.Article.tags: (fields.W340) null has no effect on ManyToManyField.

创建超级用户:弱密码校测(8位以上)zhangsong/1q2w3e!@#
D:\python培训\our_python\demo_django_server>python manage.py createsuperuser
System check identified some issues:
WARNINGS:
bbs.Article.tags: (fields.W340) null has no effect on ManyToManyField.
Username (leave blank to use 'admin'): zhangsong
Email address:
Password:
Password (again):
This password is too short. It must contain at least 8 characters.
Password:
Password (again):
Superuser created successfully.

D:\python培训\our_python\demo_django_server>python manage.py shell
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>>>> from app01 import models

CRUD---create、revise、update、delete增删改查
objects.create
b1 = app01.models.Book(name="linux"...)
b1.save()
objects.update
objects.first第一个
objects.last最后一个
objects.filter返回列表
objects.all返回对象列表
objects.get 返回单个对象或者错误(DoesNotExist不存在错误、MultipleObjectsReturned返回多个对象的错误)
objects.get_or_create 返回False表示查询对象存在未创建,返回True表示查询对象不存在并成功创建,返回IntegrityError表示不存在,但创建时数据不完善造成创建失败
objects.delete

新增:
>>> models.Publisher.objects.create(name='qinghua',website="http://qinghua.edu.com.cn")
<Publisher: qinghua>
>>> models.Publisher.objects.create(name='youdian',website="http://youdian.edu.com.cn")
<Publisher: youdian>

(1)有外键时先创建外键:外键不能为空(数据库会默认创建ID字段publisher_id=1表示publisher表的id为1的一行记录)
jango.db.utils.IntegrityError: NOT NULL constraint failed: app01_book.publisher_id
>>> models.Book.objects.create(name='math',price=12,pub_date='2013-12-12',publisher_id=1)
<Book: math>
>>> models.Book.objects.create(name='wu',price=12,pub_date='2013-12-12',publisher_id=1)
<Book: wu>
>>> models.Book.objects.create(name='le',price=32,pub_date='2003-12-12',publisher_id=2)
<Book: le>

(2)含有多对多字段的表新增数据、必须先创建对应的对象,最后插入多对多的字段(其他字段先创建、最后补增多对多字段)
models.Book.objects.create(name='math',price=12,pub_date='2013-12-12',publisher_id=1,authors_id=1)#authors为多对多字段
多对多报错:
ValueError: "<Book: math>" needs to have a value for field "book" before this many-to-many relationship can be used.
obj = models.Book.objects.create(name='math',price=12,pub_date='2013-12-12',publisher_id=1) #创建对象
obj.authors.add(1,2) #对象中增添authors字段并赋值
obj.authors.remove(1,2) #对象中删除authors字段
obj.save() #保存

查询:
外键查询:publisher为外键
obj = models.Book.objects.create(name='math',price=12,pub_date='2013-12-12',publisher_id=1)
obj.publisher.name #即可查出obj这个对象关联的外键的记录中的name字段的值
>>> obj.publisher.name
'qinghua'
查询部分字段:
>>> models.Book.objects.values("name","price")
<QuerySet [{'name': 'python', 'price': 12}, {'name': 'linux', 'price': 122}, {'name': 'java', 'price': None}]>

get不存在:
app01.models.DoesNotExist: Book matching query does not exist.

get_or_create不存在则创建,返回值True表示已经创建,False表示未创建
>>> models.Book.objects.get_or_create(name='java',publisher_id=1,pub_date="2011-03-15")
(<Book: java>, True)
>>> models.Book.objects.get_or_create(name='java')
(<Book: java>, False)

__contains包含
__icontains包含 忽略大小写
__startswith 开始
__endswith 结束
__range 范围
__isnull 为空
__regex 正则表达式
__iregex 正则表达式 忽略大小写

>>> models.Book.objects.filter(name__contains='java')
<QuerySet [<Book: java>]>
>>> models.Book.objects.filter(name__contains='jAva')
<QuerySet []>
>>> models.Book.objects.filter(name__icontains='jAva')
<QuerySet [<Book: java>]>

>>> models.Book.objects.filter(pub_date__range=("2011-01-01","2222-01-01"))
<QuerySet [<Book: python>, <Book: linux>, <Book: java>]>
>>> models.Book.objects.filter(pub_date__year=2011)
<QuerySet [<Book: java>]>

>>> models.Book.objects.filter(pub_date__isnull=False)
<QuerySet [<Book: python>, <Book: linux>, <Book: java>]>
>>> models.Book.objects.filter(pub_date__isnull=True)
<QuerySet []>

取反操作:
>>> models.Book.objects.exclude(price=None) #查询所有price不为空的对象
<QuerySet [<Book: python>, <Book: linux>]>

Aggregation(聚合)
聚合操作:(不统计包含null的数据)
>>> from django.db.models import Avg,Max,Min,Sum,Count
>>> models.Book.objects.all().count()
3
>>> models.Book.objects.all().aggregate(Sum("price"))
{'price__sum': 134}
>>> models.Book.objects.all().aggregate(Avg("price"))
{'price__avg': 67.0}

>>> models.Book.objects.all().aggregate(Max("price"))
{'price__max': 122}
>>> models.Book.objects.all().aggregate(Min("price"))
{'price__min': 12}

values后面跟分类的名称、annotate聚合统计
>>> models.Book.objects.values("publisher__name").annotate(Count("id"))
<QuerySet [{'id__count': 3, 'publisher__name': 'qinghua'}, {'id__count': 2, 'publisher__name': 'youdian'}]>

# The top 5 publishers, in order by number of books.
>>> pubs = models.Publisher.objects.annotate(num_books=Count('book')).order_by('-num_books')[:5]
>>> pubs[0].num_books
1323

output_field指定输出格式
>>> from django.db.models import F, FloatField, Sum
>>> Book.objects.all().aggregate(price_per_page=Sum(F('price')/F('pages'), output_field=FloatField()))
{'price_per_page': 0.4470664529184653}

其他操作:https://docs.djangoproject.com/en/1.9/topics/db/aggregation/

Q语句:
>>> from django.db.models import Q
>>> q1 = Q(pub_date__year="2016")
>>> q2 = Q(pub_date__year="2016") | Q(pub_date__year="2018")
>>> q3 = Q(pub_date__year="2016") | ~Q(pub_date__year="2018")
>>> q4 = Q(pub_date__year="2016") , Q(pub_date__year="2018")
>>> q1
<Q: (AND: ('pub_date__year', '2016'))>
>>> q2
<Q: (OR: ('pub_date__year', '2016'), ('pub_date__year', '2018'))>
>>> q3
<Q: (OR: ('pub_date__year', '2016'), (NOT (AND: ('pub_date__year', '2018'))))>
>>> q4
<Q: (AND: ('pub_date__year', '2016'),(AND: ('pub_date__year', '2018')))>
>>> models.Book.objects.filter(q3)
<QuerySet [<Book: python>, <Book: linux>, <Book: java>]>

F语句:
批量更新数据库
>>> from django.db.models import F
>>> from app01 import models
>>> models.Book.objects.values("price")
<QuerySet [{'price': 12}, {'price': 12}, {'price': 32}, {'price': 12}, {'price': 22}]>
>>> models.Book.objects.update(price=F("price")+15)
5
>>> models.Book.objects.values("price")
<QuerySet [{'price': 27}, {'price': 27}, {'price': 47}, {'price': 27}, {'price': 37}]>

(数据迁移)将同一个表的某一个字段的值,全部传给另一个字段
>>> from django.db.models import F
>>> from app01 import models
>>> models.Book.objects.update(memo=F("price")) --->将price字段的值全部赋值给memo字段

(数据比较)同一个表不同字段进行比较
>>> from django.db.models import F
>>> models.Book.objects.filter(memo__gt=F('price'))

 form表单

后端生成前端需要的数据和样式,前端仅负责调用并展示--->

app中建forms表单(创建位置没有要求,能找到即可),在forms中建一个类(AmForm),类中写明具体返回的字段名称和样式;
views视图中导入视图(from app01.froms import forms并实例化,form = AmForm(),并以参数(字典)的形式传给前端);
前端输入数据给后端,先提交给表单验证,将数据提交给表单form = AmForm(request.POST),验证数据合法性form.is_valid(),验证后的数据传给cleaned_data属性进行格式化数据(form.cleaned_data),验证失败的错误放入form.errors中;
(样式和逻辑验证全部在app下的forms文件中添加);
样式添加在attrs字段中,格式为字典;
自定义逻辑验证,增加clean_colname(colname为字段名称)的函数,并在函数中验证,验证完返回验证的字段,否则后端业务拿到数据为None;

转载于:https://www.cnblogs.com/feiyu_Team/p/6654220.html

Django--ORM操作相关推荐

  1. Django ORM操作

    Django ORM操作 一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果<2> get(**kwargs): 返回与所给筛选条 ...

  2. Django - ORM操作

    Django - ORM操作 一. 必知必会13条 单表查询之神奇的双下划线 二. ForeignKey操作 正向查找 反向操作 三. ManyToManyField 四. 聚合查询和分组查询 聚合 ...

  3. django orm原理_django 动态创建一个模型的多个table name, 并通过 Django ORM 操作

    动态创建table, 并通过 Django ORM 操作. 动态的创建表 动态的创建模型其实就是在运行时生成 Model 类, 这个可以通过函数实现, 通过传参(今天的日期, 如: 20181211) ...

  4. django mysql orm教程_带你了解Django ORM操作(基础篇)

    前言 在日常开发中,需要大量对数据库进行增删改查操作. 如果头铁的话,使用原生SQL是最好的,毕竟性能又高,又灵活. 但是通常情况下,我们不是太需要那么苛刻的性能,也没有那么多刁钻的需求用原生SQL ...

  5. django ORM 操作

    ORM操作 select * from tb where id > 1 # 对应关系 models.tb.objects.filter(id__gt=1) models.tb.objects.f ...

  6. Django ORM

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  7. 第十八 django及ORM操作

    一.项目及ORM操作 1.添加新项目 python manage.py startapp blog 2.配置数据库类 models.py from django.db import models# C ...

  8. Django 之ORM操作

    1.什么是ORM? 全称关系对象映射Object Relational Mapping(简称ORM),是通过描述面向对象与数据库之间的对应的元数据,将对象持久化的更新到数据库中. 有了ORM,就不需要 ...

  9. Django ORM那些相关操作

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

  10. 【Django】ORM操作#2

    目录 必知必会的13条查询方法 单表查询之神奇的双下划线 一对多 ForeignKey 多对多 ManyToManyField 在Python脚本中调用Django环境 Django终端打印SQL语句 ...

最新文章

  1. 使用 ale.js 制作一个小而美的表格编辑器(2)
  2. Win2008 R2实战之只读域控制器部署(图)
  3. 线性回归 linear regression
  4. [JSON].typeOf( keyPath )
  5. Gradle笔记——Gradle的简介与安装
  6. 本科是最底层?学历真的那么重要么?
  7. java编译不报错但运行啥都没_java编译时与运行时概念与实例详解
  8. 交易撮合引擎原理与实现【含源码】
  9. 苹果库乐队怎么玩_学会这个,自己给苹果手机换来电铃声
  10. 中富之命能有多少钱_算命中富 算命的说我是中富命,谁可以帮忙解释下
  11. Pytorch安装找不到指定的模块\torch\lib\asmjit.dll
  12. [UOJ30]/[CF487E]Tourists
  13. phpcms 会员头像h5上传_PHPCMS 在任意页面调取会员头像
  14. 光盘和U盘安装win7和ubuntu14.04全步骤
  15. 学人工智能数学要好吗?
  16. 闽高校计算机二级c语言模拟器,闽高校计算机二级C语言模拟卷及答案教案.doc
  17. TDSQL水平扩容实践案例
  18. 2021年G3锅炉水处理考试总结及G3锅炉水处理模拟试题
  19. JDK下载API文档
  20. 如何在ppt中插入另一张ppt 的内容

热门文章

  1. 深度解析dba_segments和sys.seg$中的细节差异(下)
  2. com+组件日志记录(log4net)
  3. SQL Server 2008不能修改表的解决方法
  4. Distance metric learning
  5. 【正一专栏】贾乃亮发文后李小璐会如何回应?
  6. 使用scipy实现简单神经网络
  7. 差分法c语言源程序,差分法求数据压缩
  8. Rest 微服务工程搭建02——微服务消费者订单Module模块 || @RequestBody 的重要作用
  9. PL/SQL 数据库连接工具的下载、安装与使用实例演示
  10. 推导LookAt函数定义的视图矩阵