模型层

ORM操作

# 单表查询表
class User(models.Model):name = models.CharField(max_length=32)age = models.IntegerField()register_time = models.DateField()
# 多表查询表
class Book(models.Model):title = models.CharField(max_length=32)price = models.DecimalField(max_digits=8,decimal_places=2)publish_date = models.DateField(auto_now_add=True)# 外键关系publish = models.ForeignKey(to='Publish')   # 一对多关系authors = models.ManyToManyField(to='Author')  # 多对多关系class Publish(models.Model):name = models.CharField(max_length=32)addr = models.CharField(max_length=32)email = models.EmailField()  # 对应就是varchar类型class Author(models.Model):name = models.CharField(max_length=32)age = models.IntegerField()authordetail = models.OneToOneField(to='AuthorDetail')  # 一对一关系class AuthorDetail(models.Model):phone = models.CharField(max_length=32)addr = models.CharField(max_length=32)
单表查询
# 新增数据
'''基于 create 创建user_obj = models.User.objects.create(name="Ethan", age=18, register_time="2019-6-12")基于对象的绑定方法创建user_obj = models.User(name="Jason", age=88, register_time="2019-6-6")user_obj.save()from datetime import datetimecurrent_time = datetime.now()models.User.objects.create(name="Bilibili",age=20, register_time=current_time)'''
# 修改数据
"""基于对象user_obj = models.User.objects.filter(name="Ethan").first()user_obj.age = 21user_obj.save()基于 querysetuser_obj = models.User.objects.filter(name="Ethan").update(age=22)
"""
# 删除数据
"""基于 querysetmodels.User.objects.filter(name="Jason").delete()基于对象user_obj = models.User.objects.filter(name="Jason").first()user_obj.delete()
"""
# 查询数据
"""# all() 返回全部数据,为queryset类型result = models.User.objects.all()print(result)# filter(**kwargs) 条件查询,返回querysetresult = models.User.objects.filter(name="Bilibili")print(result)# get(**kwargs) 与filter一样都是条件查询,直接返回对象,但匹配不到数据则报错,不建议使用result = models.User.objects.get(name="Ethan")print(result)# exclude(**kwargs) 返回非满足条件的对象result = models.User.objects.exclude(name="Ethan")print(result)# order_by(*field_name) 根据字段名排序,默认升序,加负号则降序result = models.User.objects.order_by("age")print(result)result = models.User.objects.order_by("-age")print(result)# reverse() 在被 order_by() 后使用,反序result = models.User.objects.order_by("age").reverse()print(result)# count() 返回查询数据的条数# result = models.User.objects.count()# result = models.User.objects.all().count()result = models.User.objects.filter(name="Ethan").count()print(result)# first() 返回第一个数据对象result = models.User.objects.first()print(result)result = models.User.objects.last()     # 返回最后一个对象print(result)result = models.User.objects.all()[0]   # 不支持负索引print(result)# exists() 判断数据是否为空result = models.User.objects.all().exists()print(result)result = models.User.objects.filter(name="BB").exists()print(result)# values() 以列表套字典的形式返回对应字段名的值result = models.User.objects.values("name")print(result)result = models.User.objects.values("name", "age")print(result)# values_list() 以列表套元组的形式返回对应字段名的值result = models.User.objects.values_list("name", "age")print(result)# distinct() 去重result = models.User.objects.all().distinct()print(result)
"""
# 双下划线查询
"""# 查询年纪大于30岁的用户result = models.User.objects.filter(age__gt=30)print(result)# 查询年纪小于30岁的用户result = models.User.objects.filter(age__lt=30)print(result)# 查询年纪大于等于20岁的用户result = models.User.objects.filter(age__gte=20)print(result)# 查询年纪小于等于20岁的用户result = models.User.objects.filter(age__lte=20)print(result)# 查询年纪为20或22或30的用户result = models.User.objects.filter(age__in=[20, 22, 30])print(result)# 查询年纪在20~30岁之间的用户result = models.User.objects.filter(age__range=[20, 30])print(result)# 查询指定日注册的用户result = models.User.objects.filter(register_time__day=12)print(result)# 查询名字中包含字母b的用户result = models.User.objects.filter(name__contains="n")     # 区别大小写print(result)result = models.User.objects.filter(name__icontains="n")    # 不区分大小写print(result)# 查询名字以Eth开头的用户result = models.User.objects.filter(name__startswith="Eth")   # 区分大小写print(result)# 查询名字以li结尾的用户result = models.User.objects.filter(name__endswith="li")print(result)
"""
多表查询
一对多
# 新增数据
"""直接写 idmodels.Book.objects.create(title="火影", price=99.9, publish_id=1)传数据对象publish_obj = models.Publish.objects.filter(pk=2).first()models.Book.objects.create(title="海贼王", price=88.8, publish=publish_obj)
"""
# 修改数据
"""queryset 修改models.Book.objects.filter(pk=3).update(publish_id=1)  # 传idpublish_obj = models.Publish.objects.filter(pk=1).first()models.Book.objects.filter(pk=2).update(publish=publish_obj)  # 传对象对象修改book_obj = models.Book.objects.filter(pk=2).first()book_obj.publish_id = 2  # 传idbook_obj.save()book_obj = models.Book.objects.filter(pk=2).first()publish_obj = models.Publish.objects.filter(pk=1).first()book_obj.publish = publish_obj  # 传对象book_obj.save()
"""
# 删除数据
"""queryset删除models.Book.objects.filter(pk=2).delete()models.Publish.objects.filter(pk=1).delete()对象删除book_obj = models.Book.objects.filter(pk=2).first()book_obj.delete()
"""
多对多
# 添加绑定关系 add
# add支持传数字或者对象,并且可以传多个
"""直接绑定idbook_obj = models.Book.objects.filter(pk=2).first()book_obj.authors.add(1)book_obj.authors.add(2,3)直接绑定对象book_obj = models.Book.objects.filter(pk=3).first()author_obj = models.Author.objects.filter(pk=5).first()author_obj2 = models.Author.objects.filter(pk=2).first()author_obj3 = models.Author.objects.filter(pk=1).first()book_obj.authors.add(author_obj)book_obj.authors.add(author_obj2, author_obj3)
"""
# 修改绑定关系 set
#  set(args)  args必须为可迭代对象
"""直接通过id修改book_obj = models.Book.objects.filter(pk=3).first()book_obj.authors.set((5,))book_obj.authors.set((1, 2, 3))  # 先清空后修改直接通过对象修改单个修改book_obj = models.Book.objects.filter(pk=2).first()author_obj = models.Author.objects.filter(pk=1).all()book_obj.authors.set(author_obj)批量修改author_obj2 = models.Author.objects.filter(pk=2).first()author_obj3 = models.Author.objects.filter(pk=3).first()author_obj4 = models.Author.objects.filter(pk=5).first()book_obj.authors.set((author_obj2, author_obj3, author_obj4))
"""
# 删除绑定关系 remove
"""通过id删除book_obj = models.Book.objects.filter(pk=3).first()#book_obj.authors.remove(1)# book_obj.authors.remove(2,3)通过对象删除book_obj = models.Book.objects.filter(pk=3).first()author_obj = models.Author.objects.all().first()book_obj.authors.remove(author_obj) # 单个删除author_list = models.Author.objects.all() # 批量删除book_obj.authors.remove(*author_list)  # 需要将queryset打散
"""
# 清空 clear()
"""book_obj = models.Book.objects.filter(pk=3).first()book_obj.authors.clear()
"""
# 基于对象的表查询
"""正向查询"""
"""查询书籍是火影忍者的出版社邮箱book_obj = models.Book.objects.filter(title="火影").first()email = book_obj.publish.emailprint(email)查询书籍是口袋妖怪的作者的姓名book_obj = models.Book.objects.filter(title="口袋妖怪").first()name = book_obj.authors  # app03.Author.Nonename = book_obj.authors.all()print(name)查询作者为阿大的电话号码author_obj = models.Author.objects.filter(name="阿大").first()phone = author_obj.authordetail.phoneprint(phone)
"""
"""反向查询"""
"""查询出版社是Bilibili的书籍         #一对多的反向查询publish_obj = models.Publish.objects.filter(name="Bilibili").first()book = publish_obj.book_set.all()print(book)查询作者阿二写过的所有书籍           #多对多的反向查询author_obj = models.Author.objects.filter(name="阿二").first()books = author_obj.book_set.all()print(books)查询电话号码是999的作者姓名          #一对一的反向查询detail_obj = models.AuthorDetail.objects.filter(phone=999).first()name = detail_obj.author.nameprint(name)
"""
# 基于下划线的查询
"""正向查询"""
"""查询书籍为海贼王的出版社地址address = models.Book.objects.filter(title="海贼王").values('publish__addr')print(address)查询书籍为名侦探柯南的作者的姓名name = models.Book.objects.filter(title="名侦探柯南").values('authors__name')print(name)查询作者为阿三的家乡address = models.Author.objects.filter(name="阿三").values('authordetail__addr')print(address)
"""
"""反向查询"""
"""查询 Cilicili 出版社出版的书籍books = models.Publish.objects.filter(name="Cilicili").values('book__title')print(books)查询 电话号码为 114 的作者姓名name = models.AuthorDetail.objects.filter(phone=114).values('author__name')print(name)查询数据为口袋妖怪的作者的电话号码phone = models.Book.objects.filter(title="口袋妖怪").values('authors__authordetail__phone')print(phone)
"""
# 聚合查询
"""from django.db.models import Max, Min, Count, Sum, Avg查询指定或者所有书籍的作者个数count = models.Book.objects.aggregate(count_num=Count('authors'))count = models.Book.objects.filter(pk=3).aggregate(count_num=Count('authors'))print(count)查询所有出版社出版的书的平均价格avg_price = models.Publish.objects.aggregate(avg_price=Avg('book__price'))print(avg_price)
"""
# 分组查询
"""统计每个出版社出版的书的平均价格price = models.Publish.objects.annotate(price=Avg('book__price')).values('price')print(price)统计各出版社最便宜的书的价格price = models.Publish.objects.annotate(price = Min('book__price')).values('price')print(price)统计每个作者书的总价sum = models.Author.objects.annotate(sum_price=Sum('book__price')).values('sum_price')print(sum)"""

转载于:https://www.cnblogs.com/Ethan99/p/11013123.html

酱狗的杂七杂八(叁)相关推荐

  1. 有服主传送玩家指令_我的世界:狗子传送机学废了?没关系,简单无脑的WiFi红石来了!...

    点击上方 蓝字 即可关注,每天有免费文章分享,欢迎留言小编看到会及时回复!!! 声明:本文素材均来源于网络,如有侵权联系删除 图酱在我的世界:狗子无用?错,是你不会用!试试大神开发的狗子回家机文章中介 ...

  2. 波士顿动力送狗抗疫:头顶iPad,背装对讲机,说是减少医患接触,但性价比真的OK吗?...

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 现如今的波士顿动力,也是哪 ...

  3. 捡垃圾、跳大绳、种花、写字,波士顿动力机器狗迎来重大升级

    2021-02-02 12:26:06 机器之心报道 作者:蛋酱.魔王 今天,波士顿动力发布了 Spot 机器人全新视频,除了添加了一条机械臂,它还能实现捡垃圾.跳绳.种花等多种功能. 当你以为波士顿 ...

  4. python server酱_面向回家编程!GitHub标星两万的quot;Python抢票神器”快用起来!...

    作者 |曹培信.池俊辉 来源 |公众号大数据文摘 盼望着,盼望着, 春节的脚步近了, 然而,每年到这个时候, 最难的, 莫过于一张回家的火车票. 据悉, 今年春运期间, 全国铁路发送旅客人次同比将增长 ...

  5. OSChina 周六乱弹 —— 老用户与狗

    2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单(2018)请戳(这里) [今日歌曲] @yijiangxiyang :如今却忆江南乐,当时年少春衫薄.分享杨千 ...

  6. DIY一只机器狗需要多少钱?最低仅900美元,斯坦福大学出品,代码已开源

    机器之心报道 参与:蛋酱 DIY 一只四足机器狗,最低只需要 900 美元?它是斯坦福学生机器人俱乐部的新成员「Pupper」. 自从波士顿动力 Spot 机器狗开启零售以来,不知道有多少人迷上了这只 ...

  7. python server酱_12306这是肿么了?开售一秒就抢完,如何用Python抢到回家车票?

    盼望着,盼望着,春节的脚步近了,然而,每年到这个时候,最难的,莫过于一张回家的火车票. 据悉,今年春运期间,全国铁路发送旅客人次同比将增长 8.0%.达到 4.4 亿人次. 2020 年铁路春运自 1 ...

  8. OSChina 周六乱弹 —— 运维狗的背锅日常

    2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单(2017)请戳(这里) [今日歌曲] @冬天之雪  :@小小编辑 好久没给你发过歌了,因为竟然还有这么特别的音 ...

  9. python server酱_用Python抢到回家的车票,so easy

    盼望着,盼望着,春节的脚步近了,然而,每年到这个时候,最难的,莫过于一张回家的火车票. 据悉,今年春运期间,全国铁路发送旅客人次同比将增长 8.0%.达到 4.4 亿人次. 2020 年铁路春运自 1 ...

最新文章

  1. 优化杭州某著名电子商务网站高并发千万级大型数据库经验之- 磁盘I/O性能
  2. gym/100633/J Ceizenpok’s formula
  3. 性能瓶颈分析整体思路
  4. 2019-03-13-算法-进化(鸡蛋掉落)
  5. 解决Oracle 11gR2 空闲连接过多,导致连接数满的问题
  6. 【Android】Windows环境安装Android Studio教程
  7. sql server 视图_轻松搜索SQL Server –搜索目录视图
  8. cocos2d-x学习知识点记录
  9. [Java] 蓝桥杯ADV-92 算法提高 求最大公约数
  10. 【读书笔记《Android游戏编程之从零开始》】4.Android 游戏开发常用的系统控件(EditText、CheckBox、Radiobutton)
  11. php电子书mobi,EPUB / PDF / MOBI 電子書下載
  12. ESP8266-WIFI模块配置
  13. Windows 序列号查看
  14. python正则表达式匹配数字或者逗号_将数字与正则表达式相匹配-只有数字和逗号...
  15. html表格的thead标签,thead和tbody标签
  16. 图书馆抢座系统(python) 附源码
  17. 腾讯音乐路演PPT曝光:发行区间13至15美元 下周上市
  18. Too Files - 免费无限空间网络硬盘
  19. JAVA必背面试题和项目面试通关要点
  20. 极客时间大数据训练营知识总结脑图

热门文章

  1. Simscape —— 在另一台电脑上打开Simscape模型报错/显示不出模型
  2. NahimicSvc64.exe逻辑炸弹导致CPU直飚99%
  3. 【面经牛客网整理】度小满一面
  4. 百度云android平板,百度网盘hd版本下载-百度网盘hd平板版本下载v11.6.3 安卓官方版-2265安卓网...
  5. C1-见习工程师(计算机通识)
  6. 翻过大山越过海洋看到了什么
  7. Deep Learning-Based Video Coding: A Review and A Case Study
  8. 新技术触电海南,4大“爆点”点燃全场,下一站福州!
  9. Your Organization has Turned off Automatic Updates (转载)
  10. 【Echarts】关于关闭点击地图时显示黄色的方法