Django QuerySet API---数据库接口

  • 基本的创建与查询
    # -*- coding: utf-8 -*-
    
    from django.http import HttpResponse
    
    from TestModel.models import Test
    
    
    """# 数据库操作--新建数据
    def testdb(request):
        test1 = Test(name='runoob')
        test1.save()
        
        #第一种—---—四种方法但并不适用本案例,类名People需要修改
        Person.objects.create(name=name,age=age)
        
        #第二种
        p = Person(name="WZ", age=23)
        p.save()
        
        #第三种
        p = Person(name="TWZ")
        p.age = 23
        p.save()
    
        #第四种
        Person.objects.get_or_create(name="WZT", age=23)
        #这种方法是防止重复很好的方法,但是速度要相对慢些,返回一个元组,第一个为Person对象,第二个为True或False, 新建时返回的是True, 已经存在时返回False.
        return HttpResponse("<p>数据添加成功!</p>")
        
        """
    
    
    """# 数据库操作--获取数据
    def testdb(request):
        # 初始化
        response = ""
        response1 = ""
    
        # 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM
        list = Test.objects.all()
    
        # filter相当于SQL中的WHERE,可设置条件过滤结果
        response2 = Test.objects.filter(id=1)
    
        # 获取单个对象
        response3 = Test.objects.get(id=1)
    
        # 限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2;
        Test.objects.order_by('name')[0:2]
    
        # 数据排序
        Test.objects.order_by("id")
    
        # 上面的方法可以连锁使用
        Test.objects.filter(name="runoob").order_by("id")
    
        # 输出所有数据
        for var in list:
            response1 += var.name + " "
        response = response1
        return HttpResponse("<p>" + response + "</p>")"""
    
    """#数据库操作--更新数据
    #修改数据可以使用 save() 或 update():
    def testdb(request):    
        # 修改其中一个id=1的name字段,再save,相当于SQL中的UPDATE
        test1 = Test.objects.get(id=1)
        test1.name = 'Google'
        test1.save()
    
        # 另外一种方式
        # Test.objects.filter(id=1).update(name='Google')
    
        # 修改所有的列
        # Test.objects.all().update(name='Google')
    
        return HttpResponse("<p>修改成功</p>")"""
    
    
    # 数据库操作--删除数据
    def testdb(request):
        # 删除id=1的数据
        test1 = Test.objects.get(id=1)
        test1.delete()
    
        # 另外一种方式
        # Test.objects.filter(id=1).delete()
    
        # 删除所有数据
        # Test.objects.all().delete()
    
        return HttpResponse("<p>删除成功</p>")

     

  • 从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet。
  • 文中的例子大部分是基于这个 blog/models.py
  • from django.db import models
     
     
    class Blog(models.Model):
        name = models.CharField(max_length=100)
        tagline = models.TextField()
     
        def __str__(self):
            return self.name
     
    class Author(models.Model):
        name = models.CharField(max_length=50)
        email = models.EmailField()
     
        def __str__(self):
            return self.name
     
    class Entry(models.Model):
        blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
        headline = models.CharField(max_length=255)
        body_text = models.TextField()
        pub_date = models.DateField()
        mod_date = models.DateField()
        authors = models.ManyToManyField(Author)
        n_comments = models.IntegerField()
        n_pingbacks = models.IntegerField()
        rating = models.IntegerField()
     
        def __str__(self):
            return self.headline

     

 

  •    1. QuerySet 创建对象的方法

  

python manage.py shell

>>> from blog.models import Blog
>>> b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')
>>> b.save()
 
总之,一共有四种方法
# 方法 1
Author.objects.create(name="WeizhongTu", email="tuweizhong@163.com")
 
# 方法 2
twz = Author(name="WeizhongTu", email="tuweizhong@163.com")
twz.save()
 
# 方法 3
twz = Author()
twz.name="WeizhongTu"
twz.email="tuweizhong@163.com"
twz.save()
 
# 方法 4,首先尝试获取,不存在就创建,可以防止重复
Author.objects.get_or_create(name="WeizhongTu", email="tuweizhong@163.com")
# 返回值(object, True/False)

备注:前三种方法返回的都是对应的 object,最后一种方法返回的是一个元组,(object, True/False),创建时返回 True, 已经存在时返回 False

 

自强学堂  学习笔记,侵必删,2020-07-24

posted @ 2020-08-04 10:52  def_Class  阅读(177)  评论(0编辑  收藏  举报