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实现单词翻译功能
Jun 06 Python
从django的中间件直接返回请求的方法
May 30 Python
Python框架Flask的基本数据库操作方法分析
Jul 13 Python
python把数组中的数字每行打印3个并保存在文档中的方法
Jul 17 Python
Python中的十大图像处理工具(小结)
Jun 10 Python
Django 大文件下载实现过程解析
Aug 01 Python
Django框架HttpRequest对象用法实例分析
Nov 01 Python
Django自带的加密算法及加密模块详解
Dec 03 Python
通过实例简单了解Python中yield的作用
Dec 11 Python
Python使用docx模块实现刷题功能代码
Feb 13 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
Sep 23 Python
python遍历路径破解表单的示例
Nov 21 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
解析thinkphp的左右值无限分类
2013/06/20 PHP
PHP对接微信公众平台消息接口开发流程教程
2014/03/25 PHP
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
2014/06/12 PHP
PHP查询附近的人及其距离的实现方法
2016/05/11 PHP
PHP简单实现二维数组的矩阵转置操作示例
2017/11/24 PHP
些很实用且必用的小脚本代码
2006/06/26 Javascript
javascript css float属性的特殊写法
2008/11/13 Javascript
jQuery前台数据获取实现代码
2011/03/16 Javascript
用js实现输入提示(自动完成)的实例代码
2013/06/14 Javascript
jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
2015/03/25 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
基于JS实现省市联动效果代码分享
2016/06/06 Javascript
jQuery获取剪贴板内容的方法
2016/06/16 Javascript
移动端web滚动分页的实现方法
2017/05/05 Javascript
angular学习之从零搭建一个angular4.0项目
2017/07/10 Javascript
小程序实现发表评论功能
2018/07/06 Javascript
基于vue-upload-component封装一个图片上传组件的示例
2018/10/16 Javascript
laydate时间日历插件使用方法详解
2018/11/14 Javascript
this在vue和小程序中的使用详解
2019/01/28 Javascript
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
Vue单页面应用中实现Markdown渲染
2021/02/14 Vue.js
使用原生javascript开发计算器实例代码
2021/02/21 Javascript
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
举例讲解Python面向对象编程中类的继承
2016/06/17 Python
python微信跳一跳游戏辅助代码解析
2018/01/29 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
2018/11/10 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
2019/06/04 Python
对Python中一维向量和一维向量转置相乘的方法详解
2019/08/26 Python
通过代码实例了解Python sys模块
2020/09/14 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
2020/11/28 Python
python实现三种随机请求头方式
2021/01/05 Python
基于HTML5 WebGL的3D机房的示例
2018/03/16 HTML / CSS
物理学专业自荐信
2014/06/11 职场文书
python 实现定时任务的四种方式
2021/04/01 Python
Python实现天气查询软件
2021/06/07 Python
利用Python多线程实现图片下载器
2022/03/25 Python