django【orm操作】
一、ORM表结构
1 class Publisher(models.Model): 2 name = models.CharField(max_length=30, verbose_name="名称") 3 address = models.CharField("地址", max_length=50) 4 city = models.CharField('城市',max_length=60) 5 state_province = models.CharField(max_length=30) 6 country = models.CharField(max_length=50) 7 website = models.URLField() 8 9 class Meta: 10 verbose_name = '出版商' 11 verbose_name_plural = verbose_name 12 13 def __str__(self): 14 return self.name 15 16 class Author(models.Model): 17 name = models.CharField(max_length=30) 18 def __str__(self): 19 return self.name 20 21 class AuthorDetail(models.Model): 22 sex = models.BooleanField(max_length=1, choices=((0, '男'),(1, '女'),)) 23 email = models.EmailField() 24 address = models.CharField(max_length=50) 25 birthday = models.DateField() 26 author = models.OneToOneField(Author) 27 28 class Book(models.Model): 29 title = models.CharField(max_length=100) 30 authors = models.ManyToManyField(Author) 31 publisher = models.ForeignKey(Publisher) 32 publication_date = models.DateField() 33 price=models.DecimalField(max_digits=5,decimal_places=2,default=10) 34 def __str__(self): 35 return self.title
二、ORM增加数据
from app01.models import *一、单表增加数据#create方式一: Author.objects.create(name='Alvin')#create方式二: Author.objects.create(**{"name":"alex"})#save方式一: author=Author(name="alvin") author.save()#save方式二: author=Author()author.name="alvin"author.save()二、1对多增加数据 #方式一:#Book.objects.create(title='vb',publisher_id=1, publication_date="2016-7-7",price=198)#方式二:#publisher_obj = Publisher.objects.get(id=3)#Book.objects.create(title='vb',publisher=publisher_obj, publication_date="2016-7-7",price=198)备注:将 publisher_id=2 改为 publisher=publisher_obj三、多对多增加数据1.#为id=1这本书增加2个作者。将数据增加到第三张表中# 正向增加author1=Author.objects.get(id=1)author2=Author.objects.filter(name='alvin')[0]book=Book.objects.filter(id=1)[0]book.authors.add(author1,author2)2.#反向增加#将多本书增加到一个作者book=models.Book.objects.filter(id__gt=1)authors=models.Author.objects.filter(id=1)[0]authors.book_set.add(*book)authors.book_set.remove(*book)3.如果第三张表是通过models.ManyToManyField()自动创建的,那么绑定关系只有上面一种方式#如果第三张表是自己创建的: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()
三、ORM删除数据
1.删除BOOK表id=1的数据Book.objects.filter(id=1).delete() 2.删除一个出版社. 注意与出版相关联的书也会被删除 Publisher.objects.filter(id=3).delete()3.删除id=6这本书和作者id=1的关联(删除第三张关系表数据)book = Book.objects.filter(id=6)[0] # 找到这本书的对象author = Author.objects.filter(id=1)[0] # 找到这个作者的对象 author.book_set.remove(book) # 反向删除book.authors.remove(author) # 正向删除
四、ORM更新数据
1.对象更新(所有字段更新,性能低)ret = Publisher.objects.get(id=2)ret.name = "复旦大学"ret.save()2.级联方法更新Publisher.objects.filter(id=1).update(city="北京市")
五、ORM查询数据
1.了不起的双下划线(__)之单表条件查询 # models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值 # # models.Tb1.objects.filter(id__in=[11, 22, 33]) # 获取id等于11、22、33的数据 # models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in # # models.Tb1.objects.filter(name__contains="ven") # models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感 # # models.Tb1.objects.filter(id__range=[1, 2]) # 范围bettwen and # # startswith,istartswith, endswith, iendswith,2.了不起的双下划线(__)之多表条件关联查询 # 正向查找(条件)# ret3=models.Book.objects.filter(title='Python').values('id') # print(ret3)#[{'id': 1}] #正向查找(条件)之一对多 ret4=models.Book.objects.filter(title='Python').values('publisher__city')print(ret4) #[{'publisher__city': '北京'}]#正向查找(条件)之多对多ret5=models.Book.objects.filter(title='Python').values('author__name')print(ret5)ret6=models.Book.objects.filter(author__name="alex").values('title')print(ret6)#注意#正向查找的publisher__city或者author__name中的publisher,author是book表中绑定的字段#一对多和多对多在这里用法没区别# 反向查找(条件)#反向查找之一对多:ret8=models.Publisher.objects.filter(book__title='Python').values('name')print(ret8)#[{'name': '人大出版社'}] 注意,book__title中的book就是Publisher的关联表名 ret9=models.Publisher.objects.filter(book__title='Python').values('book__authors')print(ret9)#[{'book__authors': 1}, {'book__authors': 2}]#反向查找之多对多:ret10=models.Author.objects.filter(book__title='Python').values('name')print(ret10)#[{'name': 'alex'}, {'name': 'alvin'}]#注意#正向查找的book__title中的book是表名Book#一对多和多对多在这里用法没区别
转载于:https://www.cnblogs.com/weibiao/p/6871803.html
django【orm操作】相关推荐
- Django ORM操作
Django ORM操作 一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果<2> get(**kwargs): 返回与所给筛选条 ...
- Django - ORM操作
Django - ORM操作 一. 必知必会13条 单表查询之神奇的双下划线 二. ForeignKey操作 正向查找 反向操作 三. ManyToManyField 四. 聚合查询和分组查询 聚合 ...
- django orm原理_django 动态创建一个模型的多个table name, 并通过 Django ORM 操作
动态创建table, 并通过 Django ORM 操作. 动态的创建表 动态的创建模型其实就是在运行时生成 Model 类, 这个可以通过函数实现, 通过传参(今天的日期, 如: 20181211) ...
- django mysql orm教程_带你了解Django ORM操作(基础篇)
前言 在日常开发中,需要大量对数据库进行增删改查操作. 如果头铁的话,使用原生SQL是最好的,毕竟性能又高,又灵活. 但是通常情况下,我们不是太需要那么苛刻的性能,也没有那么多刁钻的需求用原生SQL ...
- django ORM 操作
ORM操作 select * from tb where id > 1 # 对应关系 models.tb.objects.filter(id__gt=1) models.tb.objects.f ...
- Django ORM
Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...
- 第十八 django及ORM操作
一.项目及ORM操作 1.添加新项目 python manage.py startapp blog 2.配置数据库类 models.py from django.db import models# C ...
- Django 之ORM操作
1.什么是ORM? 全称关系对象映射Object Relational Mapping(简称ORM),是通过描述面向对象与数据库之间的对应的元数据,将对象持久化的更新到数据库中. 有了ORM,就不需要 ...
- Django ORM那些相关操作
一般操作 https://docs.djangoproject.com/en/1.11/ref/models/querysets/ 官网文档 常用的操作 <1> all() ...
- 【Django】ORM操作#2
目录 必知必会的13条查询方法 单表查询之神奇的双下划线 一对多 ForeignKey 多对多 ManyToManyField 在Python脚本中调用Django环境 Django终端打印SQL语句 ...
最新文章
- 在matlab中将处理结果输出为shp文件
- python带界面的计算器
- geoserver 3_使用GeoServer 和 mapbox-gl 搭建离线地图服务
- 如何将Android Studio项目提交(更新)到github
- mysql+索引+rebuild_(solr系列:五) solr定时实时重建索引和增量更新
- 日本最后一刻阻拦鸿海收购夏普:质疑董事私心
- mysql 总分区表限制_MySQL分区表的局限和限制详解
- java jre 和jed_需要jre的软件如何安装,如jedit?
- wps office2019PC版和Mac版_来试试这款政府版WPS吧
- c++ Dxgi+FFmpeg 完成对截图屏幕,以及将屏幕数据保存为MP4格式,以完成录屏功能
- 电子邮件--详解SMTP和POP3协议
- android+表情符号乱码,Android Emoji表情截取不完整,乱码
- sunShine问题
- 解决网络和Internet设置中只有飞行模式的问题
- Android NFC识别CPU卡和m1卡
- WSL2 Ubuntu中apt update命令报错,无法解析域名解决方法
- tomcat启动后出现乱码解决
- 中国队没进世界杯,但是其他遍地都是“中国制造”!
- root后充电很慢,root后开机慢
- Win7/8/10安装Centos7/Redhat7双系统丢失windows启动项的解决办法