Python 在 sql 中不正确地更新 JSON 字符串



我正在进行反向地理编码并更新生成的 O/P(JSON 格式)并使用 json o/p 更新 sql 表列,但它无法按预期正确存储或更新它。

以下是执行反向地理编码后更新的内容

>pw

{'results': [{'address_components': [{'long_name': 'Nandanvan A Wing', 'short_name': 'Nandanvan A Wing', 'types': ['establishment', 'point_of_interest', 'premise']}, {'long_name': 'Shivaji Nagar Marg', 'short_name': 'Shivaji Nagar Marg', 'types': ['route']}, {'long_name': 'Vishnu Prasad Society', 'short_name': 'Vishnu Prasad Society', 'types': ['neighborhood', 'political']}, {'long_name': 'Navpada', 'short_name': 'Navpada', 'types': ['political', 'sublocality', 'sublocality_level_3']}, {'long_name': 'Parle Colony', 'short_name': 'Parle Colony', 'types': ['political', 'sublocality', 'sublocality_level_2']}, {'long_name': 'Vile ....72.8454698}}}, 'place_id': 'ChIJ1SbMGMrJ5zsRQd3_uFHHDN4', 'types': ['political', 'sublocality', 'sublocality_level_3']}], 'status': 'OK'}

但事实就是如此,

这是我使用的代码

import pyodbc          
import urllib.request
import urllib.parse
import json
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;DATABASE=mydb;UID=test;PWD=test@321;autocommit=True')
cursor = cnxn.cursor()
cursor.execute("select R_GEOCODE_ID, SOURCE_PXVAL, SOURCE_PYVAL from MST_NHB_R_GEOCODE where R_GEOCODE_ID=675421")
ID=[]
px_val=[]
py_val=[]
for row in cursor.fetchall():
      ID.append(row[0])
      px_val.append(row[1])
      py_val.append(row[2])
      #
      wp = urllib.request.urlopen("https://maps.googleapis.com/maps/api/geocode/json?latlng={0},{1}".format(row[1],row[2]))
      pw=wp.read().decode('utf-8')
      pw = json.loads(pw)
      if(pw['status'] == 'OK'):   
          sql = 'exec [db_name].dbo.USP_GEO_UPDATE ?, ?'
          values = (str(pw), row[0])
          cursor.execute(sql, (values))

cnxn.commit()      
cursor.close()      
cnxn.close()

它将 JSON 完全转换为'引号,而反向地理编码则在引号"。对此的任何建议都将有所帮助。

谢谢。

当你执行pw = json.loads(pw)时,你从JSON响应创建一个python字典对象。然后,当您对该对象调用str()时,您将获得 Python 字典的字符串表示形式,而不是有效的 JSON。相反,请使用 json.dumps() 创建 JSON 格式的字符串。所以,values = (json.dumps(pw), row[0]).dumpsloads中的尾随"s"表示"字符串"。

相关内容

  • 没有找到相关文章

最新更新