zoukankan      html  css  js  c++  java
  • django框架基础ORM单表操作长期维护

      ###############    单表操作-添加数据    ################

    import os
    if __name__ == '__main__':
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ORM.settings")
        import django
        django.setup()
    
        from app01 import models
    
        # 一、添加表记录
        # 对于单表有两种方式
        # 添加数据的两种方式
        # 方式一:实例化对象就是一条表记录
        obj = models.Publish(name="上地出版社", city="北京", email="1919@qq.com")
        obj.save()
        # 方式二:
        models.Publish.objects.create(name="朝阳出版社", city="北京", email="1919@qq.com")

    ###############    单表操作-查询数据-必会的13条    ################

    """
    返回QuerySet对象的方法有
    all() filter() exclude() order_by() reverse() distinct()
    
    特殊的QuerySet
    values()       返回一个可迭代的字典序列
    values_list() 返回一个可迭代的元祖序列
    
    返回具体对象的 get() first() last() 返回布尔值的方法有: exists() 返回数字的方法有 count()
    """

    实例:

    import os
    if __name__ == '__main__':
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ORM.settings")
        import django
        django.setup()
        from app01 import models
    
        # ORM一般操作,必知必会13条:
        # 返回queryset对象的:
        # 8个,all filter values values_list exclude order_by reverse distinct
        all_book = models.Book.objects.all()  # 返回所有数据,结果是可以遍历的
        book1 = models.Book.objects.filter(id=1)  # 返回满足条件的数据
        book2 = models.Book.objects.values()  # 这是把所有字段拿出来了,这是一个字典序列,values('name','create_time')  #可以指定字段,
        book3 = models.Book.objects.values_list()  # values_list('name','create_time') #这是返回的一个元组,
        book4 = models.Book.objects.exclude(id=1)  # 返回不满足条件的数据
        # book5 = models.Book.objects.order_by('id')  # 对结果排序,升序
        # book5 = models.Book.objects.order_by('-id')  # 对结果排序,降序,在字段前面加减号,
        book5 = models.Book.objects.filter(id__lt=3).order_by('-id')  # 对过滤结果进行排序
        book6 = models.Book.objects.reverse()
        book7 = models.Book.objects.distinct()
        # 返回具体对象的:
        # 3个,get first last
        book8 = models.Book.objects.get(id=1)  # 查不到数据会报异常,所以一般不用这个,返回的结果中有且只有一条数据,有多条数据,也会报异常
        book9 = models.Book.objects.first()
        book10 = models.Book.objects.last()
        # 返回布尔类型
        # 1个,exists
        book11 = models.Book.objects.exists()  # 判断查询集里面有没有数据,如果有就是True,没有就是False,括号里面不需要有值
        # 返回数量
        # 1个,count
        book12 = models.Book.objects.count()
    
        print(book12)

    ###############    单表操作-双下划线   ################

    import os
    from datetime import date
    if __name__ == '__main__':
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ORM.settings")
        import django
        django.setup()
        from app01 import models
    
        # 模糊查询:
        book1 = models.Book.objects.filter(title__contains='')  # 包含红的,
        book2 = models.Book.objects.filter(title__endswith='')  # 以志结尾的,
        book3 = models.Book.objects.filter(title__startswith='西')  # 以西开头的
    
        # 查询书名不为空的书
        book4 = models.Book.objects.filter(title__isnull=False)
    
        # 范围查询
        book5 = models.Book.objects.filter(id__in=[2, 3])
    
        # 比较查询
        book6 = models.Book.objects.filter(id__gt=3)  # id大于3,great
        book7 = models.Book.objects.filter(id__lt=3)  # id小于3 less
        book8 = models.Book.objects.filter(id__gte=3)  # id大于等于3 equal
        book9 = models.Book.objects.filter(id__lte=3)  # id小于等于3 equal
    
        # 日期查询
        # 查询1980年出版的图书
        book10 = models.Book.objects.filter(pub_data__year=1980)
        # 查询1980年1月1日后发布的图书
        book11 = models.Book.objects.filter(pub_data__gt=date(1981, 1, 1))

     ###############    django -修改数据    ################

    import os
    if __name__ == '__main__':
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ORM.settings")
        import django
        django.setup()
        from app01 import models
    
        # 第一种方式
        publish = models.Publish.objects.get(nid=1)  # get返回一个具体的对象
        publish.name = "tenlen"
        publish.save()
    
        # 第二种方式
        models.Publish.objects.filter(nid=2).update(name="xxx")  # 不能使用get(id =5) filter返回一个queryset对象
    
        ret = models.Publish.objects.all()
        print(ret)
    
    """
    修改表记录
    注意:
    <1> 第二种方式修改不能用get的原因是:update是QuerySet对象的方法,get返回的是一个model对象,它没有update方法,
    而filter返回的是一个QuerySet对象(filter里面的条件可能有多个条件符合,比如name='alvin',可能有两个name='alvin'的行数据)。
    <2>在“插入和更新数据”小节中,我们有提到模型的save()方法,这个方法会更新一行里的所有列。 
    而某些情况下,我们只需要更新行里的某几列。
    此外,update()方法对于任何结果集(QuerySet)均有效,这意味着你可以同时更新多条记录update()方法会返回一个整型数值,
    表示受影响的记录条数。
    注意,这里因为update返回的是一个整形,所以没法用query属性;对于每次创建一个对象,想显示对应的raw sql,
    需要在settings加上日志记录部分
    
    """

      ###############    ORM-删除数据    ################

    import os
    if __name__ == '__main__':
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ORM.settings")
        import django
        django.setup()
        from app01 import models
    
        models.Publish.objects.filter(nid=id).delete()
    
        b =models.Publish.objects.get(pk=1)
        b.delete()
    
    
    """
    删除表记录
    删除方法就是 delete()。它运行时立即删除对象而不返回任何值。例如:e.delete()
    你也可以一次性删除多个对象。每个 QuerySet 都有一个 delete() 方法,它一次性删除 QuerySet 中所有的对象。
    例如,下面的代码将删除 pub_date 是2005年的 Entry 对象:
    Entry.objects.filter(pub_date__year=2005).delete()
    
    要牢记这一点:无论在什么情况下,QuerySet 中的 delete() 方法都只使用一条 SQL 语句一次性删除所有对象,
    而并不是分别删除每个对象。如果你想使用在 model 中自定义的 delete() 方法,就要自行调用每个对象的delete 方法。
    (例如,遍历 QuerySet,在每个对象上调用 delete()方法),而不是使用 QuerySet 中的 delete()方法。
    
    在 Django 删除对象时,会模仿 SQL 约束 ON DELETE CASCADE 的行为,换句话说,删除一个对象时也会删除与它相关联的外键对象。
    例如:
    b = Blog.objects.get(pk=1)
    b.delete()
    要注意的是: delete() 方法是 QuerySet 上的方法,但并不适用于 Manager 本身。
    这是一种保护机制,是为了避免意外地调用 Entry.objects.delete() 方法导致 所有的 记录被误删除。
    如果你确认要删除所有的对象,那么你必须显式地调用:
    Entry.objects.all().delete()
    
    """

    ###############    django -ORM单表查询函数    ################

    ###############    django -ORM单表查询函数    ################

  • 相关阅读:
    Rainmeter 雨滴桌面 主题分享
    行人检測之HOG特征(Histograms of Oriented Gradients)
    const和readonly差别
    ADB命令解析
    Java实现 蓝桥杯VIP 算法训练 接水问题
    Java实现 蓝桥杯VIP 算法训练 星际交流
    Java实现 蓝桥杯VIP 算法训练 星际交流
    Java实现 蓝桥杯VIP 算法训练 星际交流
    Java实现 蓝桥杯VIP 算法训练 星际交流
    Java实现 蓝桥杯VIP 算法训练 星际交流
  • 原文地址:https://www.cnblogs.com/andy0816/p/12320250.html
Copyright © 2011-2022 走看看