使用余弦球定律按Django中的接近度过滤邮政编码

使用余弦球定律按Django中的接近度过滤邮政编码,第1张

使用余弦球定律按Django中的接近度过滤邮政编码

有可能在Django中执行原始SQL查询

我的建议是,编写查询以提取ID列表(看起来像您现在正在执行的 *** 作),然后使用ID提取关联的模型(在常规的非原始SQL
Django查询中)。尝试使您的SQL尽可能独立于方言,这样一来,即使您必须切换数据库,也不必担心另一件事。

为了澄清,这是一个如何做的例子:

def get_models_within_25 (self):    from django.db import connection, transaction    cursor = connection.cursor()    cursor.execute("""SELECt id, (         3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) *         cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) *         sin( radians( lat ) ) ) )        AS distance FROM stores HAVINg distance < 25        ORDER BY distance LIMIT 0 , 20;""")    ids = [row[0] for row in cursor.fetchall()]    return MyModel.filter(id__in=ids)

作为免责声明,我不能保证这段代码,因为我编写任何Django已有几个月的时间了,但是它应该遵循正确的原则。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5642788.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存