我一直在尝试以下但总是失败,
roomTypeSQL = "SELECT spftype FROM cameron_toll_spatialfeatures WHERE ST_Contains(ST_GeomFromText(%s), ST_geomFromWKB(geometry)) = 'True';"
roomTypeData = (pointTested) # "POINT(-3.164005 55.926378)"
.execute(roomTypeSQL, roomTypeData)
我想从我的表中获取包含特定点的多边形。我也试过了ST_Within
也失败了。我认为我的问题与点和多边形的格式有关,但我已经尝试了几乎所有的组合,没有任何工作。我尝试定义我的多边形并且它工作但我必须使用数据库中的多边形。我的postgresql日志文件也不是特别有帮助..
任何人都可以看到出错吗?
提前谢谢!
答案 0 :(得分:0)
可能是一个简单的答案...... st_contains返回't'而不是'true'。 Postgres是上限敏感的,确保不是T
答案 1 :(得分:0)
这与python运营商有关。我正确地使用python%运算符输入了所有的sql参数,并且它工作正常。像这样,
roomTypeSQL = "SELECT spftype FROM cameron_toll_spatialfeatures WHERE ST_Contains(ST_GeomFromText(%s),ST_geomFromWKB(geometry))=%s;"
roomTypeData = (pointTested,'t') # "POINT(-3.164005 55.926378)"
.execute(roomTypeSQL, roomTypeData)
python运算符有时候非常令人沮丧。它并不总是按预期工作。我有一些SQL命令的例子,我必须将参数直接放在SQL命令中。虽然在Python文档中不可取,但这种方法很有效。