SQLAlchemy找不到正确的结果

时间:2019-03-04 15:18:57

标签: python postgresql flask psycopg2

我目前正在开发使用flask和postgres作为后端的Web应用程序。在此,我有一个包含字段lat, lngrofrs_value的Church模型。要在pgAdmin中找到教堂及其坐标,我运行以下命令:select lat, lng, rofrs_value from church order by rofrs_value desc limit 10。这样将显示10个结果,如下所示:Query result with 10 rows。在后端,我有以下端点和方法来检索rofrs得分:

@bp.route("/flood/rofrs/", methods=["GET"])
def risk_rofrs():
    lat = request.args.get("lat", default=None, type=float)
    lon = request.args.get("lon", default=None, type=float)
    return church_rofrs(lat, lon)

def church_rofrs(lat, lon):
    ROFRS_SCORES = {
        0: 0,
        1: 10,
        2: 50,
        3: 100,
        4: 200
    }
    prob_level = db.session.query(Church.rofrs_value).filter(
        Church.lng == lon,
        Church.lat == lat
    ).all()
    if len(prob_level) != 0:
        print("The building is a church with a ROFRS of " + str(prob_level[0][0]))
        return str(ROFRS_SCORES[prob_level[0][0]])
    else:
        print("Entity with given coordinates not found. Returning zero.")
        return "0"

当我访问此网址

http://localhost:5000/risks/flood/rofrs/?lat=52.364253408754152&lon=1.237043090299609 
我得到的结果为0,并且消息显示,即使pgAdmin显示数据库中存在具有这些坐标的行,也没有找到具有给定坐标的实体。

有人知道什么可能导致SQLAlchemy找不到匹配的行吗?预先谢谢你。

1 个答案:

答案 0 :(得分:0)

我通过@galaxyan找到的解决方案是在risk_rofrs方法中将type=float切换为type=str。这样,该方法将返回预期的响应。