Django object filter查詢[轉]


用PYTHON ,DJANGO 做站,在通常的情況下,需要用到 orM 的查詢方法,比如object.filter(tag__contains='keywords')....

在這種情況下,如果你跟蹤 sql 語句,你會發現,SQL 語句會生成 select .... like bianry '%keywords%', 如果是這樣的語句,在某些情況是下是會出問題的,也就是說查詢出來的數據可能會比你預計的少。

如果你用 raw sql 查總數 select count(*) from table where like '%keywords%' 得到數量可能比你用ORM 采用上面的方式得到的數據多,問題就在於生成的條件問題。

后來查詢了 django  說明,如果把ORM 語句變成:object.filter(tag__icontains='keywords').... 就好了。

注意contains ,icontains 的區別. 后來從django官網查到了說明:

程序代碼 程序代碼

operators = {
        'exact': '= %s',
        'iexact': 'LIKE %s',
        'contains': 'LIKE BINARY %s',
        'icontains': 'LIKE %s',
        'regex': 'REGEXP BINARY %s',
        'iregex': 'REGEXP %s',
        'gt': '> %s',
        'gte': '>= %s',
        'lt': '< %s',
        'lte': '<= %s',
        'startswith': 'LIKE BINARY %s',
        'endswith': 'LIKE BINARY %s',
        'istartswith': 'LIKE %s',
        'iendswith': 'LIKE %s',
    }



參考說明,就可以寫自己的語句了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM