2

さて、私はファイルを解析する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) のように変更しようとしましたが、このエラーが再び発生しました。データを変更してこのエラーを回避するにはどうすればよいですか?

4

1 に答える 1

1

さて、いくつかの調査といくつかのテストの後、私は最終的に答えを見つけました。この問題は python ではなく、mysql で発生しました。

まず、 Data 変数が のようになる必要がありますData="LineString(1 1,2 2,3 3)"。次に、挿入関数に を記述(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} 

今それは動作します!

于 2013-04-13T20:30:32.123 に答える