【发布时间】:2019-03-04 15:18:56
【问题描述】:
我目前正在开发一个使用 flask 和 postgres 作为后端的 Web 应用程序。在此,我有一个带有 lat, lng 和 rofrs_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