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 09 Python
详解Python爬虫的基本写法
Jan 08 Python
Python全局变量用法实例分析
Jul 19 Python
Python找出微信上删除你好友的人脚本写法
Nov 01 Python
Python异步操作MySQL示例【使用aiomysql】
May 16 Python
Flask模板引擎之Jinja2语法介绍
Jun 26 Python
python批量将excel内容进行翻译写入功能
Oct 10 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
Dec 09 Python
Python3爬虫关于识别点触点选验证码的实例讲解
Jul 30 Python
python 监控服务器是否有人远程登录(详细思路+代码)
Dec 18 Python
python 实现定时任务的四种方式
Apr 01 Python
Python学习之包与模块详解
Mar 19 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无限分类的深入理解
2013/06/02 PHP
php递归删除目录下的文件但保留的实例分享
2014/05/10 PHP
PHP实现的简单组词算法示例
2018/04/10 PHP
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
关于Javascript与iframe的那些事儿
2013/07/04 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
javascript列表框操作函数集合汇总
2013/11/28 Javascript
jQuery异步获取json数据方法汇总
2014/12/22 Javascript
javascript cookie的简单应用
2016/02/24 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
JS基于封装函数实现的表格分页完整示例
2018/06/26 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
可能被忽略的一些JavaScript数组方法细节
2019/02/28 Javascript
今天,小程序正式支持 SVG
2019/04/20 Javascript
微信小程序导航栏跟随滑动效果的实现代码
2019/05/14 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
vue请求数据的三种方式
2020/03/04 Javascript
js实现整体缩放页面适配移动端
2020/03/31 Javascript
详解javascript void(0)
2020/07/13 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
[01:02:02]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第二局
2016/02/25 DOTA
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
Python3使用pandas模块读写excel操作示例
2018/07/03 Python
给 TensorFlow 变量进行赋值的方式
2020/02/10 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
Keras自动下载的数据集/模型存放位置介绍
2020/06/19 Python
如何基于python把文字图片写入word文档
2020/07/31 Python
基于opencv实现简单画板功能
2020/08/02 Python
Python ellipsis 的用法详解
2020/11/20 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
GE设备配件:GE Appliance Parts(家电零件、配件和滤水器)
2018/11/28 全球购物
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
大专应届生个人简历的自我评价
2013/10/15 职场文书
高三毕业典礼主持词
2014/03/27 职场文书
武侯祠导游词
2015/02/04 职场文书
舞蹈社团活动总结
2015/05/07 职场文书