座標のペア間の距離を計算し、結果でテーブルの列を更新しようとしています。SQL文に変数を含める際の問題 - Python 3.4
ループの結果を印刷すると、各座標のペア間の距離の計算がうまく動作します(スクリーンショット参照)。
ただし、テーブルに追加された距離に問題があります(スクリーンショットを参照)。すべての行の距離は15886、ポイント間の距離(-36.8090839、174.718904)と(0,0)です。
私は私のUPDATEコマンドがどのように構築されているかに問題があります。具体的には、テーブルからの座標(緯度と経度)の変数の追加です。
誰かが間違っていることを指摘できますか?
私はPythonを初めて使用しています。
import _sqlite3, time, datetime, gpxpy.geo
conn = _sqlite3.connect('SpatialDB')
c = conn.cursor()
lat1 = -36.8090839
lon1 = 174.718904
c.execute('Select * FROM Media')
data = c.fetchall()
for row in data:
lat2 = row[1]
lon2 = row[2]
dist = gpxpy.geo.haversine_distance(lat1, lon1, lat2, lon2)/1000
SQLCommand =("UPDATE Media SET LastQueried = Current_Timestamp, Distance = ?");
value = [dist]
c.execute(SQLCommand, value)
print(dist)
conn.commit()
c.close()
conn.close()
WHERE句がないと、UPDATEはすべての行を同じ値に設定します。 [Wikipedia](https://en.wikipedia.org/wiki/Update_%28SQL%29)(記事の最後)を参照してください。 – BrenBarn
また、 'conn.commit()'はループ内にある必要があります。そうでない場合は、最後の 'c.execute()'だけがコミットされます。 – Parfait