djang 之数据库单表操作

13个必会操作总结:

查询方法:

<1> all(): 查询所有结果
<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象
<3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
<4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象
<5> order_by(*field): 对查询结果排序('-id')/('price')

<6> reverse(): 对查询结果反向排序 >>>前面要先有排序才能反向
<7> count(): 返回数据库中匹配查询(QuerySet)的对象数量。
<8> first(): 返回第一条记录
<9> last(): 返回最后一条记录
<10> exists(): 如果QuerySet包含数据,就返回True,否则返回False
<11> values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列
<12> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
<13> distinct(): 从返回结果中剔除重复纪录

返回QuerySet对象的方法有

all()

filter()

exclude()

order_by()

reverse()

distinct()

特殊的QuerySet

values()       返回一个可迭代的字典序列

values_list() 返回一个可迭代的元祖序列

返回具体对象的

get()

first()

last()

返回布尔值的方法有:

exists()

返回数字的方法有

count()

例子:

models:

from django.db import models

# Create your models here.

class User(models.Model):
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    register_time = models.DateField()

    def __str__(self):
        return "对象的名字%s" % self.name
View Code

单表操作

from django.test import TestCase

# Create your tests here.
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "untitled_orm.settings")
    import django
    django.setup()
    from app01 import models

    # 新增数据  只要是queryset对象就可以无限制的点queryset方法
    # models.User.objects.filter().filter().count()


    # 基于create创建-
    # user_obj = models.User.objects.create(name='egon1', age=38, register_time="2017-7-1")
    # print(user_obj.register_time)

    # 基于对象的绑定方法创建二
    # user_obj = models.User(name='Kevin', age=30, register_time='2019-1-1')
    # user_obj.save()

    # from datetime import datetime
    # ctime = datetime.now()
    # models.User.objects.create(name='egon', age=18, register_time=ctime)


    # 修改数据
    # user_obj = models.User.objects.filter(name='jason')
    # print(user_obj)  # <QuerySet [<User: User object>, <User: User object>]>

    # 基于对象的
    # user_obj = models.User.objects.filter(name='jason').first()
    # print(user_obj)  # User object
    # user_obj.age = 18
    # user_obj.save()

    # 基于queryset
    # models.User.objects.filter(name='Kevin').update(name='kevin', age=66)


    # 删除数据
    # 基于queryset
    # res = models.User.objects.filter(name='egon')
    # print(res)
    # models.User.objects.filter(name='egon').delete()

    # 基于对象
    # user_ob = models.User.objects.filter(name='owen').first()
    # user_ob.delete()

    # 查询数据
    # 1. all(): 查询所有结果   QuerySet[obj, obj]
    # 2. filter(**kwargs): 它包含了所给筛选条件相匹配的对象  QuerySet[obj, obj]
    # res = models.User.objects.filter(name='jason', age=18)  #  filter内可以放多个限制条件但是需要注意的是多个条件之间是and关系

    # 3. get(**kwargs)   object
    # 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误
    # res = models.User.objects.get(name='jason')  # 不建议使用
    # print(res)

    # 4.exclude(**kwargs): <QuerySet [<User: User object>, <User: User object>, <User: User object>]>
    # 它包含了与所给筛选条件不匹配的对象
    # res = models.User.objects.exclude(name='jason')
    # print(res)

    # 5.order_by(*field): 对查询结果排序 QuerySet[obj, obj]
    # res = models.User.objects.order_by('age')  # 默认升序
    # print(res)

    # res = models.User.objects.order_by('-age')
    # print(res)  # 倒序

    # res = models.User.objects.order_by('name')
    # print(res)

    # 6. reverse()  QuerySet[obj, obj] 对查询结果反相排序, 前面要先有排序才能反向
    # res = models.User.objects.order_by('name').reverse()
    # print(res)

    # 7. count() 返回数据库中匹配查询
    # res = models.User.objects.count()
    #
    # res = models.User.objects.all().count()
    # print(res)

    # 8.first(): 返回第一条记录 obj
    # res = models.User.objects.all().first()
    # print(res)

    # res = models.User.objects.all()[0]  # 不支持负数的索引取值
    # print(res)

    # 9.last() : 返回最后一条数据 obj
    # res = models.User.objects.all().last()
    # print(res)

    # 10. exists(): 如果QuerySet包含数据,就返回True,否则返回False
    # res = models.User.objects.all().exists()
    # res1 = models.User.objects.filter(name='jason', age=3).exists()
    # print(res, res1)

    # 11. values(*field): 返回一个QuerySet --- -个特殊的QuerySet,
    # 运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典
    # res = models.User.objects.values('name', 'age')  # QuerySet对象,列表套字典
    # print(res)  # <QuerySet [{'name': 'jason', 'age': 18}, {'name': 'Aegon1', 'age': 38}]>

    # 12. values_list() :返回一个QuerySet列表套元组
    # res = models.User.objects.values_list('name', 'age')
    # print(res)
    # <QuerySet [('jason', 18), ('nick', 44), ('kevin', 66),]

    # 13.distincat(): 从返回结果中删除重复记录,将去重后的结果返回出来,

    # res = models.User.objects.distinct()  # QuerySet [<User: 对象的名字jason>, <User: 对象的名字nick>,]
    # print(res)
    # res = models.User.objects.values('name', 'age')
    # res1 = models.User.objects.values('name', 'age').distinct()  #  【前面去重的对象必须是完全相同的数据才能去重】

    # 14. 神奇的双下划线查询 <QuerySet [obj, obj]
    # 查询年纪大于44岁的用户
    # res = models.User.objects.filter(age__gt=34)
    # print(res)

    # 查询年纪小于44岁的用户 <QuerySet [<User: 对象的名字jason>,<User: 对象的名字tank>, <User: 对象的名字Aegon1>, <User: 对象的名字jason>]>
    # res = models.User.objects.filter(age__lt=44)
    # print(res)

    # 查询年纪大于44岁的用户
    # res = models.User.objects.filter(age__gte=44)
    # print(res)

    # 查询名字中包含n的用户
    # res = models.User.objects.filter(name__contains='n')
    #
    # res = models.User.objects.filter(name__icontains='n')  # 忽略大小写
    # print(res)

    # 查询名字以j开头的用户
    # res = models.User.objects.filter(name__istartswith='j')
    # print(res)

    # 查询注册时间是在2017年的用户
    # res = models.User.objects.filter(register_time__year=2017)  # sqlite对日期格式用create才会被筛选
    # print(res)
View Code

补充:

    # 查询年龄是44或者22或者73的用户
    user_obj = models.User.objects.filter(age__in=[22, 28])
    print(user_obj)

    # 查询年龄是16到28范围内的
    user_list = models.User.objects.filter(age__range=[16, 28])
    print(user_list)
View Code
原文地址:https://www.cnblogs.com/qingqinxu/p/11258665.html