我有一个简单的SQL我从python运行,从表中获取所有这些项目(主要是我很好奇的mpoly)。这是一个几何。
cur = self.db.cursor()
cur.execute('select St_AsText(ST_Centroid(mpoly)) from swsite_cesiumentity')
allEntities = cur.fetchall()
然后我可以把信息拿出来:
print ' ***'
print allEntities[0]
print '----'
它会给我:
Row(st_astext='POINT(-87.266150008217 30.0857181963441)')
这很好,但我尝试使用这些数据然后得到所有远离上述点的点,我不知道如何使用我在sql查询中的类型我想要使用
试过这个:
for currentEntity in allEntities:
print currentEntity
cur2 = self.db.cursor()
cur2.execute ('SELECT * FROM swsite_cesiumentity WHERE ST_Distance_Sphere(mpoly, ST_GeomFromText(' + currentEntity.st_astext + ')) <= radius_mi * 1609.34)) from swsite_cesiumentity')
list = cur2.fetchall()
print list
它不喜欢我提供的第二个sql语句:
pg.ProgrammingError: ERROR: syntax error at or near "30.0857181963441"
LINE 1: ...ere(mpoly, ST_GeomFromText(POINT(-87.266150008217 30.0857181...
^
C02RH2U9G8WM:ingest sth$
答案 0 :(得分:1)
WKT是文本,SQL中的文本使用单引号'like this'
,因此:
sql = "SELECT ... ST_GeomFromText('" + wkt + "') ..."
将WKT作为文本,即SELECT ... ST_GeomFromText('POINT(1 2)') ...
根据库(您从未说过 - 是psycopg2吗?),您应该使用参数化语句来避免文本格式错误和SQL injection漏洞。