django 常用orm操作详解


Posted in Python onSeptember 13, 2017

Django流程:

1 创建Django项目 : django-admin startproject projectname

2 创建应用: : python manage.py startapp appname

3 在控制器(urls.py)创建 url 与 视图函数的映射关系(一一对应)

4 创建视图函数,完成逻辑代码

5 从数据库取出集合对象

5 把数据库变量嵌入到模板进行渲染(render方法)

6 将渲染后的html页面返回给客户端

URL:协议+域名+端口+路径

协议:http
域名:www.cnblogs.com
端口:80
路径:yuanchenqi/articles/6811632.html
数据:a=1

URL配置中的正则表达式匹配的是一个url的路径部分

TEMPALTE(模板):HTML代码+逻辑控制代码

逻辑控制语法: {{}} 渲染变量 filter : {{var|方法:参数}}

{% %} 渲染标签
{% if %}
{% for %}
{% url %}
{% url %}

自定义filter和simpletag:

(1)在app中创建templatetags模块(必须的)

(2)创建任意 .py 文件,如:my_tags.py

from django import template
register = template.Library()
@register.filter
def filter_multi(v1,v2):
return v1 * v2

(3)创建任意 .py 文件,如:my_tags.py

在使用自定义simple_tag和filter的html文件中导入之前创建的 my_tags.py :{% load my_tags %}

(4)使用simple_tag和filter:

{% load xxx %} #首行
# num=12
{{ num|filter_multi:2 }} #24

总结:

filter: 只能接受一个参数,但是可以用if等语句

simpletag: 能接受多个参数,但是不可以用if等语句

ORM:

表之表之间的关系:

一对多 外键字段一定是在子表(一对多的多的表)中 Foreign KEY

多对多 在第三张表实现,通过两个Foreign KEY

一对一 在外键字段的基础上增加唯一约束。

使用mysql方法

1更改setting文件db配置

2更改__init__文件中的驱动配置

ORM转sql的配置

settings里面配置loging

表.object.filter():得到的是一个集合对象 比如 [obj1,obj2]

表.object.get(): 得到的是一个model对象

一对多的添加记录:

# 方法1:

# Book.objects.create(id=1,title="python",publication_date="2017-03-04",price=88.8,publisher_id=1)

#方法2

p1=Publisher.objects.get(name="人大出版社")
Book.objects.create(id=2,title="python",publication_date="2017-05-04",price=98.8,publisher=p1)

在models.py文件中创建多对多关系

authors=models.ManyToManyField("Author") #多对多如果表在下方则需要加引号

多对多的添加

ManyToMany只有一种添加方式:

book.authors.add(*[author1,author2])
book.authors.remove(*[author1,author2])

注意:理解 book_obj.publisher

book_obj.authors

自建第三张表

class Book2Author(models.Model):
author=models.ForeignKey("Author")
Book= models.ForeignKey("Book")
# 那么就还有一种方式:
author_obj=models.Author.objects.filter(id=2)[0]
book_obj =models.Book.objects.filter(id=3)[0]

s=models.Book2Author.objects.create(author_id=1,Book_id=2)
s.save()
s=models.Book2Author(author=author_obj,Book_id=1)
s.save()

.value 和.value_list 操作图书表 book

#value的使用 结果不是对象 而是对象的某个字段或属性 结果也为querySet

ret1=Book.objects.values('title')
ret1_list = Book.objects.values_list('title')
print('ret1 is : ',ret1) #结果是:ret1 is : <QuerySet [{'title': 'python'}, {'title': '西游记'}, {'title': 'python3'}]>
print(ret1_list) #结果为querySet里的列表<QuerySet [('python',), ('西游记',), ('python3',)]>

修改操作update和save的区别:

update只是set指定的字段 save set所有字段,所以update 效率更高

查询:

扩充内容

# 查询相关API:

# <1>filter(**kwargs): 它包含了与所给筛选条件相匹配的对象

# <2>all(): 查询所有结果

# <3>get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。

#-----------下面的方法都是对查询的结果再进行处理:比如 objects.filter.values()--------

# <4>values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列

# <5>exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象

# <6>order_by(*field): 对查询结果排序

# <7>reverse(): 对查询结果反向排序

# <8>distinct(): 从返回结果中剔除重复纪录

# <9>values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列

# <10>count(): 返回数据库中匹配查询(QuerySet)的对象数量。

# <11>first(): 返回第一条记录

# <12>last(): 返回最后一条记录

# <13>exists(): 如果QuerySet包含数据,就返回True,否则返回False

以上这篇django 常用orm操作详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 域名分析工具实现代码
Jul 15 Python
python练习程序批量修改文件名
Jan 16 Python
用pywin32实现windows模拟鼠标及键盘动作
Apr 22 Python
Python模拟登录验证码(代码简单)
Feb 06 Python
Python实现感知器模型、两层神经网络
Dec 19 Python
解决python使用open打开文件中文乱码的问题
Dec 29 Python
python取代netcat过程分析
Feb 10 Python
python批量创建指定名称的文件夹
Mar 21 Python
java判断三位数的实例讲解
Jun 10 Python
基于 Django 的手机管理系统实现过程详解
Aug 16 Python
dpn网络的pytorch实现方式
Jan 14 Python
解决python 虚拟环境删除包无法加载的问题
Jul 13 Python
Python三级菜单的实例
Sep 13 #Python
基于Python代码编辑器的选用(详解)
Sep 13 #Python
python多线程socket编程之多客户端接入
Sep 12 #Python
python数据结构之链表详解
Sep 12 #Python
Python数据结构之单链表详解
Sep 12 #Python
python处理Excel xlrd的简单使用
Sep 12 #Python
Python3.6简单操作Mysql数据库
Sep 12 #Python
You might like
PHP下打开URL地址的几种方法小结
2010/05/16 PHP
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
PHP将页面中点击数量高的链接进行高亮显示的方法
2016/05/30 PHP
php原生数据库分页的代码实例
2019/02/18 PHP
JavaScript 组件之旅(一)分析和设计
2009/10/28 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
2014/10/17 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
整理Javascript基础语法学习笔记
2015/11/29 Javascript
浅谈js构造函数的方法与原型prototype
2016/07/04 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
详解网站中图片日常使用以及优化手法
2017/01/09 Javascript
vue+vux实现移动端文件上传样式
2017/07/28 Javascript
Angularjs实现下拉框联动的示例代码
2017/08/22 Javascript
JavaScript的数据类型转换原则(干货)
2018/03/15 Javascript
JS正则表达式常见用法实例详解
2018/06/19 Javascript
[46:09]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第三场
2014/05/26 DOTA
[42:50]NB vs VP 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python3指定路径寻找符合匹配模式文件
2015/05/22 Python
python3中dict(字典)的使用方法示例
2017/03/22 Python
Python的多维空数组赋值方法
2018/04/13 Python
python定向爬虫校园论坛帖子信息
2018/07/23 Python
python使用pipeline批量读写redis的方法
2019/02/18 Python
解决安装pyqt5之后无法打开spyder的问题
2019/12/13 Python
解决python 读取 log日志的编码问题
2019/12/24 Python
苏宁红孩子母婴商城:redbaby
2017/02/12 全球购物
若通过ObjectOutputStream向一个文件中多次以追加方式写入object,为什么用ObjectInputStream读取这些object时会产生StreamCorruptedException?
2016/10/17 面试题
学生个人求职自荐信格式
2013/09/23 职场文书
实习教师个人的自我评价
2013/11/08 职场文书
婚礼证婚人证婚词
2014/01/13 职场文书
关于元旦的广播稿
2014/02/16 职场文书
地球一小时宣传标语
2014/06/24 职场文书
校本教研活动总结
2014/07/01 职场文书
颐和园导游词400字
2015/01/30 职场文书
导师工作推荐信
2015/03/27 职场文书
图文详解Nginx版本平滑升级方案
2021/09/15 Servers
Python常遇到的错误和异常
2021/11/02 Python