2013-04-12 4 views
2

Ну, у меня есть программа python, которая анализирует файлы. Данные в этих файлах выглядит следующим образом:Python и MySql - невозможно получить объект геометрии

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

Это мой код, он посылает анализируемые данные в базу

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 данных И я всегда получаю ту же ошибку -

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

Я думаю, это потому, что я отправляю данные в переменной данных в поле Linestring в базе данных. Я попытался изменить дату, которую я отправляю, чтобы выглядеть (1 1,2 2,3 3), но я снова получил эту ошибку. Как мне изменить данные и избежать этой ошибки?

ответ

1

Ну, после некоторых исследований и некоторых тестов я наконец нашел ответ. Эта проблема была не с python, а с mysql.

Прежде всего, нам нужна наша переменная Data, чтобы она выглядела как Data="LineString(1 1,2 2,3 3)". Затем в функции Insert мы напишем (GeomFromText('%(Data)s')), чтобы помочь mysql получить геометрию из текста. Таким образом, вся строка вставки выглядит так:

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

Теперь это работает!

Смежные вопросы