游标执行 - Python

时间:2015-02-16 07:26:13

标签: django python-2.7 cursor mysql-python

我正在开发一个使用MySql数据库的Django项目。在我的项目中,其中一个方法使用两个游标连接来执行查询。它被正确关闭了。

MySql数据库有一个名为GeometryTable的表,它有两列(Geometry Datatypes)。一个是GeomPolygon(多边形值),另一个是GeomPoint(点数据)。我在我的python项目中编写了一个MySql查询,它返回给定多边形内的选定点和多边形。表(GeometryTable)有900万行值。

当我在MySql Workbench中运行查询时,花了几秒钟。但在项目中,返回值需要几分钟。任何人都可以帮我优化代码。感谢

方法是:

def GeometryShapes(polygon): 

    geom = 'POLYGON((' + ','.join(['%s %s' % v for v in polygon]) + '))'    
    query1 = 'SELECT GeomId, AsText(GeomPolygon)' \
            ' FROM GeometryTable' \
            ' WHERE MBRWithin(GeomPolygon, GeomFromText("%s")) AND length(GeomPolygon) < 10 million' % (geom)

    query2 = 'SELECT GeomId, AsText(GeomPoint)' \
                 ' FROM GeometryTable' \
                 ' WHERE  MBRWithin(GeomPoint, GeomFromText("%s")) AND length(GeomPoint) < 10 million' % (geom)  

    if query1:
     cursor = connection.cursor()
     cursor.execute(query1)           
     .....
     cursor.close()
    if query2:         
      cursor = connection.cursor()
      cursor.execute(query2)
      .......
      cursor.close()

这里,光标执行(cursor.execute(query1)cursor.execute(query2))花费几分钟来执行查询。我已经索引了指定表中的两列。

有人可以帮我优化代码吗?

0 个答案:

没有答案