【问题标题】:SQLAlchemy not finding correct resultsSQLAlchemy 找不到正确的结果
【发布时间】:2019-03-04 15:18:56
【问题描述】:

我目前正在开发一个使用 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 找不到匹配的行?提前谢谢你。

【问题讨论】:

  • 你能找到任何使用 select lat, lng, rofrs_value from church where lat=52.364253408754152 and lon=1.237043090299609;
  • 您好,感谢您的评论。当我执行该查询时,它会返回预期的结果。这使我找到了解决方案。出于某种原因,type=float 在从请求中获取参数时导致了问题。将其切换为type=str 似乎已修复它。感谢您的帮助!
  • 你不必明确定义get方法,GET方法是默认分配的。

标签: python postgresql flask psycopg2


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-09
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 2019-09-21
    • 2013-03-04
    相关资源
    最近更新 更多