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
相關文章
相關標籤/搜索