<strike id="dvvrl"></strike>
    <address id="dvvrl"></address>

          <form id="dvvrl"><form id="dvvrl"><nobr id="dvvrl"></nobr></form></form>

          <form id="dvvrl"><nobr id="dvvrl"><nobr id="dvvrl"></nobr></nobr></form>

                    <em id="dvvrl"><form id="dvvrl"></form></em>

                    集團旗下網站: 邁領人才網 | 奇酷方舟 | 紅磚升本
                    全國咨詢熱線:400-807-8991
                    您現在所在的位置:首頁 >學習資源 > Python全棧+人工智能入門教材 > Python基礎入門教程69:Django查詢集

                    Python基礎入門教程69:Django查詢集

                    來源:奇酷教育 發表于:

                    查詢集Django 模型通過默認的 Manager 類objects來訪問數據庫。例如,要打印所有 Job 的列表,則應該使用objects管理器的all方法:清

                    查詢集

                    Django 模型通過默認的 Manager 類 objects 來訪問數據庫。例如,要打印所有 Job 的列表,則應該使用 objects 管理器的 all 方法:

                    清單 11. 打印所有的職位
                    1
                    2
                    3
                    >>> from jobs.models import Job
                    >>> for job in Job.objects.all():
                    ...     print job

                    Manager 類還有兩個過濾方法:一個是 filter,另外一個是 exclude。過濾方法可以接受滿足某個條件的所有方法,但是排除不滿足這個條件的其他方法。下面的查詢應該可以給出相同的結果(“gte” 表示 “大于或等于”,而 “lt” 表示 “小于”)。

                    清單 12. 排除和過濾職位
                    1
                    2
                    3
                    4
                    >>> from jobs.models import Job
                    >>> from datetime import datetime
                    >>> q1 = Job.objects.filter(pub_date__gte=datetime(2006, 1, 1))
                    >>> q2 = Job.objects.exclude(pub_date__lt=datetime(2006, 1, 1))

                    filter 和 exclude 方法返回一些 QuerySet 對象,這些對象可以鏈接在一起,甚至可以執行連接操作。下面的 q4 查詢會查找從 2006 年 1 月 1 日開始在俄亥俄州的 Cleveland 張貼的職位:

                    清單 13. 對職位進行更多的排除和過濾
                    1
                    2
                    3
                    4
                    5
                    >>> from jobs.models import Job
                    >>> from datetime import datetime
                    >>> q3 = Job.objects.filter(pub_date__gte=datetime(2006, 1, 1))
                    >>> q4 = q3.filter(location__city__exact="Cleveland",
                    ...                location__state__exact="Ohio")

                    QuerySets 是惰性的,這一點非常不錯。這意味著只在對數據庫進行求值之后才會對它們執行查詢,這會比立即執行查詢的速度更快。

                    這種惰性利用了 Python 的分片(slicing)功能。下面的代碼并沒有先請求所有的記錄,然后對所需要的記錄進行分片,而是在實際的查詢中使用了 5 作為 OFFSET、10 作為 LIMIT,這可以極大地提高性能。

                    清單 14. Python 分片
                    1
                    2
                    3
                    >>> from jobs.models import Job
                    >>> for job in Job.objects.all()[5:15]
                    ...     print job

                    注意:使用 count 方法可以確定一個 QuerySet 中有多少記錄。Python 的 len 方法會進行全面的計算,然后統計那些以記錄形式返回的行數,而 count 方法執行的則是真正的 SQL COUNT 操作,其速度更快。我們這樣做,數據庫管理員會感激我們的。

                    清單 15. 統計記錄數
                    1
                    2
                    3
                    >>> from jobs.models import Job
                    >>> print "Count = ", Job.objects.count()       # GOOD!
                    >>> print "Count = ", len(Job.objects.all())    # BAD!

                    男人狂躁女人一进一出
                    <strike id="dvvrl"></strike>
                      <address id="dvvrl"></address>

                            <form id="dvvrl"><form id="dvvrl"><nobr id="dvvrl"></nobr></form></form>

                            <form id="dvvrl"><nobr id="dvvrl"><nobr id="dvvrl"></nobr></nobr></form>

                                      <em id="dvvrl"><form id="dvvrl"></form></em>