视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
django常用orm操作实例介绍
2020-11-27 14:22:53 责编:小OO
文档


下面小编就为大家带来一篇django 常用orm操作详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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

下载本文
显示全文
专题