前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django进阶-4-ORM单表操作

Django进阶-4-ORM单表操作

作者头像
小团子
发布2019-07-18 15:56:31
2700
发布2019-07-18 15:56:31
举报
文章被收录于专栏:数据云团

上一章提到,QuerySet与惰性机制:

QuerySet特点:

<1> 可迭代的

<2> 可切片

<3> 惰性计算和缓存机制

① 增加操作

代码语言:javascript
复制
def orm(request):
    # orm 添加一条记录的方法
    # 单表
    # 1、表.objects.create()
    models.Publish.objects.create(name='xxx出版社',addr="湖南.长沙")
    models.Classify.objects.create(category='IT')
    models.Author.objects.create(name='云团',sex='男',age=18,university='xxx大学')
    
    # 2、类实例化:obj=类(属性=XX) obj.save()
    obj=models.Author(name='团豆豆',age=18,sex='女',university='xxx学院')
    obj.save()
    
    # 一对多
    # 1、表.objects.create()
    models.Book.objects.create(title='数据挖掘',price=200,date=2019,classify_id=6, publish_id=6)
    
    # 2、类实例化:obj=类(属性=X,外键=obj)obj.save()
    classify_obj=models.Classify.objects.get(category='IT')
    publish_obj=models.Publish.objects.get(name='xxx出版社')
    
    # 注意以上获取得是和 book对象 向关联的(外键)的对象
    book_obj=models.Book(title='数据分析',price=234,date=2019,classify=classify_obj,publish=publish_obj)
    book_obj.save()
    
    # 多对多
    # 如果两表之间存在双向1对N关系,就无法使用外键来描述其关系了;
    # 只能使用多对多的方式,新增第三张表关系描述表;
    book=models.Book.objects.get(title='数据存储')
    author1=models.Author.objects.get(name='云团')
    author2=models.Author.objects.get(name='小白')
    book.author.add(author1,author2)

    # 书籍和作者是多对多关系,
    # 切记:如果两表之间存在多对多关系,例如书籍相关的所有作者对象集合,作者也关联的所有书籍对象集合
    book=models.Book.objects.get(title='大数据分析')
    author=models.Author.objects.get(name='云团')
    author2 = models.Author.objects.get(name='大白')
    book.author.add(author,author2)
    #add()   添加
    #clear() 清空
    #remove() 删除某个对象
    return HttpResponse('OK')

更改操作

代码语言:javascript
复制
# 修改方式1 update()
models.Book.objects.filter(id=1).update(price=3)

# 修改方式2 obj.save() 
book_obj=models.Book.objects.get(id=1)
book_obj.price=5
book_obj.save()

③ 查询操作

代码语言:javascript
复制
def ormquery(request):
    #------query_set对象集合 [对象1、对象2、.... ]
    books=models.Book.objects.all()
    books=models.Book.objects.filter(id__gt=2,price__lt=100)
    
    #---------单个对象,没有找到会报错
    book=models.Book.objects.get(title__endswith='分析')
    book1 = models.Book.objects.filter(title__endswith='挖掘').first()
    book2 = models.Book.objects.filter(title__icontains='数据').last()
    
    #-------query_set字典集合 [{一条记录},{一条记录} ]
    books=models.Book.objects.values('title','price',
                                    'publish__name',
                                    'date',
                                    #切记 正向连表:外键字段__对应表字段
                                    'classify__category',
                                    #反向连表: 小写表名__对应表字段
                                    'author__name',
                                    #区别:正向 外键字段__,反向 小写表名__
                                    'author__sex',
                                    'author__age',
                                    'author__university')

    books=models.Book.objects.values('title','publish__name').distinct()
      
    #exclude 按条件排除。。。
    #distinct()去重, exits()查看数据是否存在? 返回 true 和false
    title =models.Book.objects.filter(title__icontains='大数据').  
    return HttpResponse('OK')
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档