我有一个SQL查询来确定与给定输入字符串匹配的最长匹配前缀。用例是查找呼叫给定目的地的费率,该费率由数据库中的多行确定。最具体的匹配前缀是要使用的前缀。
因此在原始SQL中,它看起来像这样:
$this->Auth->authenticate['Token'] = array(
'fields' => array(
),
// 'parameter' => '_token',
'header' => 'AuthenticationToken',
'scope' => array(
'User.permission_api_login' => true
)
);
在上面的示例中,目标位置是3212345789。在实际的应用程序中,这是由缓存机制和更多内容支持的,但最终要归结于此。
我想在我们的Django项目中完成相同的API调用,并且我知道我也可以在其中使用原始SQL,但是我想知道在Django中是否有一种方法可以使用“ queryset-language”
我对此感到困惑:
SELECT * FROM rateplan_rates
WHERE '3212345789' LIKE CONCAT(prefix, '%')
ORDER BY CHAR_LENGTH(prefix) DESC LIMIT 1
缺少的部分当然是RateplanRate.objects \
.annotate(prefix_length=Length('prefix'), prefix_match=Concat('prefix', '%')) \
.filter('search_value LIKE prefix_match') \
.order_by('-prefix_length')[0:1]
。这是可能的还是我应该退回到原始SQL?