Python 和 MySql - 无法获取几何对象

标签 python mysql geometry

好吧,我有一个解析文件的 python 程序。这些文件中的数据如下所示:

Type=0x21    
Label=2428    
Data1=(54.67346,59.00001),(54.67415,59.00242),(54.67758,59.00001)

这是我的代码,它将解析后的数据发送到 MySql 数据库

import MySQLdb
f = open('test.mp', 'r')
db = MySQLdb.connect(host="127.0.0.1", user="root", passwd="", db="gis", charset='utf8')
cursor = db.cursor()
i=0
for line in f.readlines(): 
  if (line.startswith("Type")):
    type=line[5:]
  if (line.startswith("Label")):
    label=line[6:]
  if (line.startswith("Data")):
    data=line[6:]
    sql="""INSERT INTO `polylines` (Type, Label, Data) VALUES ('%(Type)s', '%(Label)s', '%(Data)s')"""%{"Type":type, "Label":label, "Data":data}
    cursor.execute(sql)
    db.commit()
db.close()
f.close()

而且我总是得到同样的错误-

 _mysql_exceptions.OperationalError: (1416, 'Cannot get 
geometry object from data you send to the GEOMETRY field')

我认为这是因为我将 Data 变量中的数据发送到数据库中的 Linestring 字段。我试图将发送的日期更改为 (1 1,2 2,3 3),但我再次遇到此错误。我应该如何更改数据并避免此错误?

最佳答案

好吧,经过一些研究和一些测试,我终于找到了答案。这个问题不是python的问题,而是mysql的问题。

首先,我们需要我们的数据变量看起来像 Data="LineString(1 1,2 2,3 3)"。然后,在 Insert 函数中,我们应该编写 (GeomFromText('%(Data)s')) ,以帮助 mysql 从文本中获取几何图形。所以,整个 Insert 行看起来像这样:

 sql="""INSERT INTO `polylines` (Type, Label, Data) VALUES ('%(Type)s', '%(Label)s', (GeomFromText('%(Data)s')))"""%{"Type":type, "Label":label, "Data":data} 

现在可以了!

关于Python 和 MySql - 无法获取几何对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15981968/

相关文章:

python - R lm 与 Python sklearn linear_model

python - 将 2 个列表附加到 1 中,并从每次迭代中交替进行

mysql - 将外键添加到新创建的表(mySQL)时出错

mysql - 我需要转义子查询吗?

math - 在 3d 空间中以匀速圆周运动围绕向量移动的点的位置

python - 沿着离散线段均匀分布点的路径行走

python - 无法使用 Python 读取服务器上的 UDP 数据包

python - Scrapy.request没有获取新的url

mysql - 如何在一个sql查询中显示所有字段和数字计数

java - 旋转坐标(Java 和几何)