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下的XSLT API进行web开发的简单教程
Apr 15 Python
详细解析Python当中的数据类型和变量
Apr 25 Python
python爬虫实战之爬取京东商城实例教程
Apr 24 Python
在Python的一段程序中如何使用多次事件循环详解
Sep 07 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
May 24 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
Apr 11 Python
python使用装饰器作日志处理的方法
Jul 11 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
Feb 17 Python
Python环境下安装PyGame和PyOpenGL的方法
Mar 25 Python
Python调用shell命令常用方法(4种)
May 11 Python
基于Python快速处理PDF表格数据
Jun 03 Python
python多线程和多进程关系详解
Dec 14 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
海贼王:最美的悬赏令!
2020/03/02 日漫
PHP5/ZendEngine2的改进
2006/10/09 PHP
ionCube 一款类似zend的PHP加密/解密工具
2010/07/25 PHP
php构造函数实例讲解
2013/11/13 PHP
PHP微框架Dispatch简介
2014/06/12 PHP
destoon找回管理员密码的方法
2014/06/21 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
2014/06/26 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
2019/04/09 PHP
Laravel框架实现调用百度翻译API功能示例
2019/05/30 PHP
如何利用AngularJS打造一款简单Web应用
2015/12/05 Javascript
js中实现字符串和数组的相互转化详解
2016/01/24 Javascript
nodejs加密Crypto的实例代码
2016/07/07 NodeJs
nodejs 搭建简易服务器的图文教程(推荐)
2017/07/18 NodeJs
详解利用 Express 托管静态文件的方法
2017/09/18 Javascript
记一次vue-webpack项目优化实践详解
2019/02/17 Javascript
Python统计文件中去重后uuid个数的方法
2015/07/30 Python
根据DataFrame某一列的值来选择具体的某一行方法
2018/07/03 Python
python通过zabbix api获取主机
2018/09/17 Python
Python3将数据保存为txt文件的方法
2019/09/12 Python
python3.x 生成3维随机数组实例
2019/11/28 Python
Python基于Faker假数据构造库
2020/11/30 Python
英国设计师泳装、沙滩装和比基尼在线精品店:Beach Cafe
2019/08/28 全球购物
班组长工作职责
2013/12/25 职场文书
九年级语文教学反思
2014/02/04 职场文书
火车的故事教学反思
2014/02/11 职场文书
《蜗牛的奖杯》教后反思
2014/04/24 职场文书
企业年度评优方案
2014/06/02 职场文书
大学毕业生推荐信
2014/07/09 职场文书
企业总经理助理岗位职责
2014/09/12 职场文书
安装工程师岗位职责
2015/02/13 职场文书
商场收银员岗位职责
2015/04/07 职场文书
网络研修心得体会
2016/01/08 职场文书
大学学生会主席竞选稿怎么写?
2019/08/19 职场文书
pytorch加载预训练模型与自己模型不匹配的解决方案
2021/05/13 Python
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电
oracle delete误删除表数据后如何恢复
2022/06/28 Oracle