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 tempfile模块学习笔记(临时文件)
May 25 Python
django反向解析和正向解析的方式
Jun 05 Python
python实现Zabbix-API监控
Sep 17 Python
python 3.6.4 安装配置方法图文教程
Sep 18 Python
python实现控制台打印的方法
Jan 12 Python
Python如何筛选序列中的元素的方法实现
Jul 15 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
Aug 14 Python
python with (as)语句实例详解
Feb 04 Python
使用python采集Excel表中某一格数据
May 14 Python
Django 解决由save方法引发的错误
May 21 Python
python下载的库包存放路径
Jul 27 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
Dec 17 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
生成sessionid和随机密码的例子
2006/10/09 PHP
PHP设计模式之简单投诉页面实例
2016/02/24 PHP
yii2.0实现创建简单widgets示例
2016/07/18 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
2019/04/09 PHP
映彩衣的js随笔(js图片切换效果)
2011/07/31 Javascript
基于jQuery中对数组进行操作的方法
2013/04/16 Javascript
javascript中负数算术右移、逻辑右移的奥秘探索
2013/10/17 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
简介JavaScript中的setHours()方法的使用
2015/06/11 Javascript
JavaScript实现的简单烟花特效代码
2015/10/20 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
2015/11/25 Javascript
基于javascript实现彩票随机数生成(简单版)
2020/04/17 Javascript
总结Node.js中的一些错误类型
2016/08/15 Javascript
jQuery tagsinput在h5邮件客户端中应用详解
2016/09/26 Javascript
浅析javascript中的Event事件
2016/12/09 Javascript
微信小程序 setData使用方法及常用错误解决办法
2017/05/11 Javascript
Node.js创建Web、TCP服务器
2017/12/05 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
微信小程序中悬浮窗功能的实现代码
2019/08/02 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
python二分法实现实例
2013/11/21 Python
Python SQLite3数据库操作类分享
2014/06/10 Python
Python输出汉字字库及将文字转换为图片的方法
2016/06/04 Python
python PyTorch预训练示例
2018/02/11 Python
python多线程调用exit无法退出的解决方法
2019/02/18 Python
简单了解python PEP的一些知识
2019/07/13 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
Python3 中sorted() 函数的用法
2020/03/24 Python
Python操作Elasticsearch处理timeout超时
2020/07/17 Python
推荐WEB开发者最佳HTML5和CSS3代码生成器
2015/11/24 HTML / CSS
面向对象概念面试题(.NET)
2016/11/04 面试题
道路交通事故赔偿协议书
2014/10/24 职场文书
岗位聘任报告
2015/03/02 职场文书
三八妇女节主持词
2015/07/04 职场文书
Python IO文件管理的具体使用
2022/03/20 Python
mybatis 获取更新记录的id
2022/05/20 Java/Android