用PYTHON ,DJANGO 做站,在通常的情況下滔灶,需要用到 orM 的查詢方法璧微,比如object.filter(tag__contains='keywords')....
在這種情況下,如果你跟蹤 sql 語(yǔ)句,你會(huì)發(fā)現(xiàn)澜掩,SQL 語(yǔ)句會(huì)生成 select .... like bianry '%keywords%', 如果是這樣的語(yǔ)句,在某些情況是下是會(huì)出問(wèn)題的杖挣,也就是說(shuō)查詢出來(lái)的數(shù)據(jù)可能會(huì)比你預(yù)計(jì)的少肩榕。
如果你用 raw sql 查總數(shù) select count(*) from table where like '%keywords%' 得到數(shù)量可能比你用ORM 采用上面的方式得到的數(shù)據(jù)多,問(wèn)題就在于生成的條件問(wèn)題惩妇。
后來(lái)查詢了 django 說(shuō)明株汉,如果把ORM 語(yǔ)句變成:object.filter(tag__icontains='keywords').... 就好了。
注意contains ,icontains 的區(qū)別. 后來(lái)從django官網(wǎng)查到了說(shuō)明:
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',
}