gpt4 book ai didi

python - sqlalchemy 中的 Haversine 公式

转载 作者:行者123 更新时间:2023-11-28 22:04:52 24 4
gpt4 key购买 nike

我的代码中有以下几行

    query = "SELECT id, " \
"( 3959 * acos( cos( radians(37) ) * cos( radians( %(lat)i ) ) * " \
"cos( radians( %(lng)i ) - radians(-122) ) + sin( radians(37) ) * " \
"sin( radians( %(lat)i ) ) ) ) AS `distance` from message where" \
" `distance` <= %(drange)d" % {'lat': float(lat), 'lng': float(lng), 'drange': int(drange)}
print query
messages = db.session.query(Message).from_statement(query).all()

当我使用它时出现以下错误

OperationalError: (OperationalError) (1054, "Unknown column 'distance' in 'where clause'") 'SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( 0 ) ) * cos( radians( 0 ) - radians(-122) ) + sin( radians(37) ) * sin( radians( 0 ) ) ) ) AS `distance` from message where `distance` <= 50' ()

解决这个问题的正确方法是什么?

最佳答案

您不能在 WHERE 子句中引用命名表达式 (distance)(我不知道这是否适用于所有数据库系统,但它位于至少对于 MySQL 而言)。您可以改用 HAVING(请参阅选项 C)。

选项:

一个。在 where 子句中再次重复表达式:

SELECT id, (long_formula) as distance FROM message WHERE (long_formula) <= ...

B.使用嵌套查询:

SELECT * FROM 
(SELECT id, (long_formula) AS distance FROM message) inner_query
WHERE distance <= ...

C.使用 HAVING 子句(我使用 SQL 多年,但在阅读 this 之前并不知道 HAVING):

SELECT id, (long_formula) as distance FROM message HAVING distance <= ...

关于python - sqlalchemy 中的 Haversine 公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6299273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com