標籤:style blog color ar 資料 sp div art 問題
用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‘, }
Django filter中用contains 在mysql中的問題