Django 查询表的几种方式

在Danjao中对单表进行查询是最基本的操做,其他的增长,删除,修改都是在查询的基础上实现的。html


最基本的查询通常是经过filter过滤或者 all获取全部的值python


例1:最基本用法运维


id等于一,并且名字等于root的条件ide

models.User.objects.filter(id=1,name='root')


id大于一,并且名字是root的条件测试

models.User.objects.filter(id__gt=1,name='root')


id小于1的条件code

models.User.objects.filter(id__lt=1)


filter内部的条件用字典的格式实现htm

dic={'name':'xx','age':10}
models.User.objects.filter(**dic)



在上面的例子中,获取的结果都是QuerySet类型,这个类型相似列表,里面每一个元素都是一个完整的对象,拥有本身的属性,也就是表里每一行对应的字段。所以,若是须要获取列表里面的第一个元素,咱们通常使用first(),好比v=models.Business.objects.filter(id=1).first(),  若是没有这个值,那么他返回的就是None;咱们使用get()方法也能够获取表值,好比 models.Business.objects.get(id=1), 可是若是这个值不存在,那就直接报错了。所以比较推荐的方法是使用filter。对象



第二种查询方式是经过values来实现。经过这种方式获取的QuerySet,里面的每个元素都是一个字典blog


例2:索引

models.Business.objects.all().values('id','caption')


第三种方式是经过value_list来实现,这种方式获取的QuerySet,里面的每个元素都是一个元祖


例3:

models.Business.objects.all().values_list('id','caption')



下面看看具体


views.py

def business(request):
    v1 = models.Business.objects.all()
    v2 = models.Business.objects.all().values('id','caption')
    v3 = models.Business.objects.all().values_list('id','caption')
    print(v1)
    print(v2)
    print(v3)
    return render(request, 'business.html', {'v1': v1,'v2': v2, 'v3': v3})


控制台输出结果能够看见列表里面的元素分别是对象,字典和元祖。

<QuerySet [<Business: Business object>, <Business: Business object>, <Business: Business object>, <Business: Business object>]>
<QuerySet [{'caption': '运维部', 'id': 1}, {'caption': '开发', 'id': 2}, {'caption': '市场', 'id': 3}, {'caption': '测试', 'id': 4}]>
<QuerySet [(1, '运维部'), (2, '开发'), (3, '市场'), (4, '测试')]>



host.html


注意的是Python里面对象是经过点.来获取属性,字典经过dic['key']获取对应,元祖经过索引获取对应值

模板语言都是经过点来获取,即便字典的key和索引也是同样!


第二个注意的是有些值,好比id 我不但愿客户端直接看见,可是又但愿调用,那么能够做为某个标签的一个属性存在。

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <h1>业务线列表(对象)</h1>
    <ul>
        {% for row in v1 %}
            <li>{{ row.id }} - {{ row.caption }} - {{ row.code }}</li>
        {% endfor %}
    </ul>
    <h1>业务线列表(字典)</h1>
    <ul>
        {% for row in v2 %}
            <li>{{ row.id }} - {{ row.caption }}</li>
        {% endfor %}
    </ul>
    <h1>业务线列表(元组)</h1>
    <ul>
        {% for row in v3 %}
            <li>{{ row.0 }} - {{ row.1 }}</li>
        {% endfor %}
    </ul>
</body>
</html>


结果以下


wKioL1l25mXx55hHAACJBK2LlTQ706.jpg


最后值得一提的是外键的查询


例如 b指向了另一个表

v=models.Host.objects.filter(nid__gt=0)
v[0].b.caption
相关文章
相关标签/搜索