gpt4 book ai didi

python - 使用 python 函数输出更新单个 postgresql 行

转载 作者:行者123 更新时间:2023-11-29 12:26:01 24 4
gpt4 key购买 nike

我正在开展一个项目,该项目需要通过 Mapbox 地理编码 API 更新 postgresql 中的一列,以将地址转换为经纬度坐标。我创建了一个 FOR 循环来读取每一行的地址。然后我想将创建的唯一经纬度坐标保存到“坐标”列中。

但是,我编写的代码使用第一行的经纬度坐标更新整个“坐标”列,而不是单独迭代和更新每一行的“坐标”列。

我哪里错了?任何帮助将不胜感激。

主要代码

import psycopg2
import json
from psycopg2.extras import RealDictCursor
import sys
from mapbox import Geocoder
from mapboxgeocode import getCoord
import numpy as np

con = None

try:

con = psycopg2.connect(database='database', user='username')
cur = con.cursor()
cur.execute("DROP TABLE IF EXISTS permits")
cur.execute("""CREATE TABLE permits(issued_date DATE, address
VARCHAR(200), workdesc VARCHAR(600),permit_type VARCHAR(100), permit_sub_type
VARCHAR(100), anc VARCHAR(4), applicant VARCHAR(100),owner_name
VARCHAR(200))""")
cur.execute(""" COPY permits FROM '/path/to/csv/file'
WITH DELIMITER ',' CSV HEADER """)
cur.execute("""ALTER TABLE permits ADD COLUMN id SERIAL PRIMARY KEY;
UPDATE permits set id = DEFAULT;""")
cur.execute("""ALTER TABLE permits ADD COLUMN coordinates VARCHAR(80);
UPDATE permits SET coordinates = 4;""")
cur.execute("""ALTER TABLE permits ADD COLUMN city VARCHAR(80);
UPDATE permits SET city = 'Washington,DC'; ALTER TABLE permits ALTER
COLUMN city SET NOT NULL;""")

cur.execute("UPDATE permits SET address = address || ' ' || city;")

cur.execute("SELECT * FROM permits;")

for row in cur.fetchall():
test = row[1]
help = getCoord(test)
cur.execute("UPDATE permits SET coordinates = %s;", (help,) )
print(test)
con.commit()



except psycopg2.DatabaseError, e:
print 'Error %s' % e
sys.exit(1)


finally:

if con:
cur.close()
con.commit()
con.close()

地理编码函数

from mapbox import Geocoder
import numpy as np

def getCoord(address):
geocoder = Geocoder(access_token='xxxxxxxxxxxxxxxx')
response = geocoder.forward(address)
first = response.geojson()['features'][0]
row = first['geometry']['coordinates']
return row

最佳答案

您需要在 UPDATE 语句中添加一个 WHERE 条件。如果没有 WHERE,SQL 只会认为您想要更新所有坐标列。适当的 WHERE 条件将让它明确知道它需要修改列中的哪个单元格。

您可能希望使用您的主键,因为它是一个唯一标识符。也许是这样的声明:

cur.execute("UPDATE permits SET coordinates = %s WHERE id = %s;", (help, row[index of the id column]) )

我认为您需要的行索引是行 [8],但您必须在代码中确认这一点。我希望它能正常工作。

关于python - 使用 python 函数输出更新单个 postgresql 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36672896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com