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中的pandas库对cdn日志进行分析详解
Mar 07 Python
python实现FTP服务器服务的方法
Apr 11 Python
python 匹配url中是否存在IP地址的方法
Jun 04 Python
Python 访问限制 private public的详细介绍
Oct 16 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
Jul 03 Python
pandas中的series数据类型详解
Jul 06 Python
Python如何调用外部系统命令
Aug 07 Python
Python使用Opencv实现图像特征检测与匹配的方法
Oct 30 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
Apr 27 Python
python 5个顶级异步框架推荐
Sep 09 Python
PyQt5中QSpinBox计数器的实现
Jan 18 Python
Python first-order-model实现让照片动起来
Jun 25 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中调用JAVA
2006/10/09 PHP
深入掌握include_once与require_once的区别
2013/06/17 PHP
PHP执行SQL文件并将SQL文件导入到数据库
2015/09/17 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
2015/12/08 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
详谈PHP程序Laravel 5框架的优化技巧
2016/07/18 PHP
php实现小程序支付完整版
2018/10/09 PHP
PHPstorm激活码2020年5月13日亲测有效
2020/09/17 PHP
用一段js程序来实现动画功能
2007/03/06 Javascript
jquery获取元素索引值index()示例
2014/02/13 Javascript
Javascript中call与apply的学习笔记
2014/09/22 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
2015/12/02 Javascript
分享js粘帖屏幕截图到web页面插件screenshot-paste
2020/08/21 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
2016/05/17 Javascript
原生JS获取元素的位置与尺寸实现方法
2017/10/18 Javascript
JavaScript实现省市联动效果
2019/11/22 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
图解JS原型和原型链实现原理
2020/09/15 Javascript
[04:00]DOTA2解说界神雕侠侣 CJ第四天谷子现场过生日
2013/07/30 DOTA
python检查URL是否正常访问的小技巧
2017/02/25 Python
Python键盘输入转换为列表的实例
2018/06/23 Python
Python计算两个矩形重合面积代码实例
2019/09/16 Python
pycharm的python_stubs问题
2020/04/08 Python
python里glob模块知识点总结
2021/01/05 Python
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
详解Canvas 跨域脱坑实践
2018/11/07 HTML / CSS
美国大码时尚女装购物网站:ELOQUII
2017/12/28 全球购物
澳大利亚女士时装在线:Rockmans
2018/09/26 全球购物
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
解决python 输出到csv 出现多空行的情况
2021/03/24 Python
酒店副总经理岗位职责范本
2014/02/04 职场文书
指导教师评语
2014/04/26 职场文书
Tomcat项目启动失败的原因和解决办法
2022/04/20 Servers
我国拿下天问一号火星着陆区附近 22 个地理实体命名:平乐、西柏坡、古田、漠河等
2022/04/29 数码科技
python使用shell脚本创建kafka连接器
2022/04/29 Python