我试图将此sql查询转换为django orm查询,但我遇到了如何在单个ORM查询中执行sqrt和其他数学计算。
SELECT latitude, longitude, SQRT(
POW(69.1 * (latitude - [input_lat]), 2) +
POW(69.1 * ([input_lng] - longitude) * COS(latitude / 57.3), 2)) AS distance
FROM MyTable HAVING distance < 25 ORDER BY distance
我尝试了什么 -
MyTable.objects.extra(select={"distance": X}).extra(where=["distance > 25"]).order_by('distance')
我应该用什么来代替X
?我正朝着正确的方向前进吗?
如果我写这个
MyTable.objects.extra(select={"distance": "SQRT(POW(69.1 * (latitude - 37), 2) + POW(69.1 * (-122 - longitude) * COS(latitude / 573), 2))"}).extra(where=["distance > 25"]).order_by('distance')
它会抛出错误OperationalError: no such function: SQRT
。我想我的DB(sqlite3)不支持这个功能。如何克服这个问题?
MyTable有5列,包括latitude
和longitude
。
我们将从最终用户获得input_lat
和input_lng
的值。