2017-06-13 11 views
0

Ubuntu 16.04でpython 3.5およびmysql 5.7.18を使用すると、executemanyステートメント内でST_GEOMFROMTEXT関数を使用することができません。executemanyを使用してST_GEOMFROMTEXTを実行できません

INSERT INTO zipcodes (zipcode, name, area, pop, emp, emp_pay, households, location) VALUES (%s,%s,%s,%s,%s,%s,%s,%s); 
[["'54517'", "'CLAM LAKE, WI'", 201.441702, 112, 10, 600, 59, "ST_GEOMFROMTEXT('POINT(46.145917 -90.930676)')"]] 
Traceback (most recent call last): 
    File "zip_parse.py", line 319, in <module> 
    main() 
    File "zip_parse.py", line 32, in main 
    insert_data(zip_db, zip_cursor, data) 
    File "zip_parse.py", line 160, in insert_data 
    zip_cursor.executemany(query, add_vals[-1:]) 
    File "/usr/local/lib/python3.5/dist-packages/mysql/connector/cursor.py", line 618, in executemany 
    return self.execute(stmt) 
    File "/usr/local/lib/python3.5/dist-packages/mysql/connector/cursor.py", line 515, in execute 
    self._handle_result(self._connection.cmd_query(stmt)) 
    File "/usr/local/lib/python3.5/dist-packages/mysql/connector/connection.py", line 488, in cmd_query 
    result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query)) 
    File "/usr/local/lib/python3.5/dist-packages/mysql/connector/connection.py", line 395, in _handle_result 
    raise errors.get_exception(packet) 
mysql.connector.errors.DataError: 1416 (22003): Cannot get geometry object from data you send to the GEOMETRY field 

しかし、渡された文はmysqlコマンドラインにコピーされたときだけで罰金に行くようだ:私は次の出力を得る

print(query) 
    print(add_vals[-1:])   
    zip_cursor.executemany(query, add_vals[-1:]) 

このコードを使用します

mysql> INSERT INTO zipcodes (zipcode, name, area, pop, emp, emp_pay, households, location) VALUES ('54517','CLAM LAKE, WI',201.441702,112,10,600,59,ST_GEOMFROMTEXT('POINT(46.145917 -90.930676)')); 
Query OK, 1 row affected (0.05 sec) 

私は過去に広範にST_GEOMFROMTEXT関数を使用していましたが、私はかなり自信がありますこれはジオメトリフィールドに空間データを追加する正しい方法です(フィールド 'location'は 'POINT'タイプです)。実証されているように、コマンドラインで作業するには引用符を必要としません(これは私の経験ではしばしば固執するポイントです)。

なぜこれが動作しないのかに関するアイデアは何度も実行されますか?

答えて

1

私は同じ問題が持っていた:

import pymysql 

point = 'POINT(18.16 -66.72)' 
geojson = '{ "type": "Point", "coordinates": [102.0, 0.0]}' 

次のスニペットは動作しません:

"INSERT INTO `zip`(`id`, `zip`, `location`, `geometry`) VALUES (NULL,100, ST_PointFromText('%s'), ST_GeomFromGeoJSON('%s'))" 
qparams = (point, geojson) 
cursor.execute(sql, qparams) 

をその答えは、この方法でそれを使用することです:

"INSERT INTO `zip`(`id`, `zip`, `location`, `geometry`) VALUES (NULL,100, ST_PointFromText('"+ point +"'), ST_GeomFromGeoJSON('"+ geojson +"'))" 
関連する問題