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 相关文章推荐
python3访问sina首页中文的处理方法
Feb 24 Python
pandas多级分组实现排序的方法
Apr 20 Python
Python类的继承用法示例
Jan 31 Python
python opencv 图像拼接的实现方法
Jun 27 Python
Python函数装饰器原理与用法详解
Aug 16 Python
Python 函数用法简单示例【定义、参数、返回值、函数嵌套】
Sep 20 Python
Python 静态方法和类方法实例分析
Nov 21 Python
Python关于__name__属性的含义和作用详解
Feb 19 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
Mar 06 Python
Python类中的装饰器在当前类中的声明与调用详解
Apr 15 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
Apr 30 Python
详解Python Celery和RabbitMQ实战教程
Jan 20 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快速入门实例教程之数据分页
2014/07/01 PHP
PHP中使用asort进行中文排序失效的问题处理
2014/08/18 PHP
php中二分法查找算法实例分析
2016/09/22 PHP
PHP实现会员账号单唯一登录的方法分析
2019/03/07 PHP
图片之间的切换
2006/06/26 Javascript
jQuery UI AutoComplete 自动完成使用小记
2010/08/21 Javascript
js this函数调用无需再次抓获id,name或标签名
2014/03/03 Javascript
javascript修改IMG标签的src问题
2014/03/28 Javascript
javascript三元运算符用法实例
2015/04/16 Javascript
jquery+ajax请求且带返回值的代码
2015/08/12 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
AngularJS递归指令实现Tree View效果示例
2016/11/07 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
详解如何使用Node.js编写命令工具——以vue-cli为例
2017/06/29 Javascript
详谈js对url进行编码和解码(三种方式的区别)
2017/08/16 Javascript
React中嵌套组件与被嵌套组件的通信过程
2018/07/11 Javascript
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
Python科学计算环境推荐——Anaconda
2014/06/30 Python
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
python数组复制拷贝的实现方法
2015/06/09 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
2018/01/04 Python
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
python opencv读mp4视频的实例
2018/12/07 Python
python中字符串数组逆序排列方法总结
2019/06/23 Python
Python经典五人分鱼实例讲解
2021/01/04 Python
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
接口的多继承会带来哪些问题
2015/08/17 面试题
董事长岗位职责
2013/11/30 职场文书
社区活动总结报告
2014/05/05 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
离婚财产处理协议书
2014/09/30 职场文书
走近毛泽东观后感
2015/06/04 职场文书
刮痧观后感
2015/06/05 职场文书
MySQL 使用SQL语句修改表名的实现
2021/04/07 MySQL
python保存图片的四个常用方法
2022/02/28 Python
Python中的协程(Coroutine)操作模块(greenlet、gevent)
2022/05/30 Python