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 命令行非阻塞输入的小例子
Sep 27 Python
python提取内容关键词的方法
Mar 16 Python
Python基于回溯法子集树模板解决m着色问题示例
Sep 07 Python
pandas DataFrame实现几列数据合并成为新的一列方法
Jun 08 Python
Python引用计数操作示例
Aug 23 Python
Python实现 版本号对比功能的实例代码
Apr 18 Python
对于Python深浅拷贝的理解
Jul 29 Python
Python IDE Pycharm中的快捷键列表用法
Aug 08 Python
python之yield和Generator深入解析
Sep 18 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
Feb 26 Python
python实现简单井字棋小游戏
Mar 05 Python
python 逆向爬虫正确调用 JAR 加密逻辑
Jan 12 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+SqlServer实现分页显示
2006/10/09 PHP
php网站判断用户是否是手机访问的方法
2013/11/01 PHP
CodeIgniter控制器之业务逻辑实例分析
2016/01/20 PHP
详谈PHP程序Laravel 5框架的优化技巧
2016/07/18 PHP
功能强大的php分页函数
2016/07/20 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
2019/08/06 PHP
实现只能输入数字的input不用replace方法
2013/09/12 Javascript
JS对象转换为Jquery对象实现代码
2013/12/29 Javascript
javascript获取web应用根目录的方法
2014/02/12 Javascript
用原生js做个简单的滑动效果的回到顶部
2014/10/15 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
jQuery的ztree仿windows文件新建和拖拽功能的实现代码
2018/12/05 jQuery
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
python查看zip包中文件及大小的方法
2015/07/09 Python
视觉直观感受若干常用排序算法
2017/04/13 Python
Python调用C# Com dll组件实战教程
2017/10/12 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
2019/12/18 Python
python中sympy库求常微分方程的用法
2020/04/28 Python
python实现企业微信定时发送文本消息的示例代码
2020/11/24 Python
python基于爬虫+django,打造个性化API接口
2021/01/21 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
html5音频_动力节点Java学院整理
2018/08/22 HTML / CSS
英国安全产品购物网站:The Safe Shop
2017/03/20 全球购物
美国顶级户外凉鞋品牌:Chacos
2017/03/27 全球购物
德国、奥地利和瑞士最大的旅行和度假门户网站:HolidayCheck
2019/11/14 全球购物
毕业生求职信的经典写法
2014/01/31 职场文书
竞选大学学委演讲稿
2014/09/13 职场文书
2014年教师学期工作总结
2014/11/08 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
《植树问题》教学反思
2016/03/03 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers
python3 hdf5文件 遍历代码
2021/05/19 Python
MySQL学习之基础操作总结
2022/03/19 MySQL
SQL Server中锁的用法
2022/05/20 SQL Server
JS前端使用canvas实现扩展物体类和事件派发
2022/08/05 Javascript