无法使用python脚本将所有行插入SQL表

时间:2019-01-03 13:37:33

标签: python sql json

我的JSON API中有两个数据集。我无法将两者都插入SQL Server。使用for循环的迭代似乎没有拾取第二个数据。有人可以帮我了解如何解决此问题。这对我来说是新的,所以由于编码与SQL有点不同,因此无法找出问题所在

import urllib, json
import pyodbc


#read data from API
url = "http://nagiosdatagateway.vestas.net/esq/ITE1452552/logstash- 2018.12.16/2/desc"
response = urllib.urlopen(url)
data = json.loads(response.read())

#define db connection
cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
                      "Server=DKCDCVDCP42\DPA;"
                      "Database=VPDC;"
                      "Trusted_Connection=yes;")
cursor = cnxn.cursor()
i = 0  
j = len(data)
print j
for i in range(i,j-1): 
#   print data[1]["_source"]["utc_timestamp"]
    print i
    print data[i]["_source"]["nagios_comment"]
    print data[i]["_source"]["nagios_author"]
    cursor.execute("insert into vpdc.pa.Pythontable(nagios_comment,nagios_author) values (?,?)",(data[i] 
    ["_source"]["nagios_comment"],data[i]["_source"]["nagios_author"] ))
    i += 1
    print i
    cnxn.commit()

这两组值都应在SQL表中的列

Nagios_comment和Nagios_author
307262828亚历克斯·克里斯托弗·拉莫斯
307160348亚历克斯·克里斯托弗·拉莫斯

1 个答案:

答案 0 :(得分:0)

已通过在脚本中正确缩进cursor.execute语句来解决此问题,如下所示。在我的原始脚本中,此行没有缩进。因此它在循环外部被调用

import urllib, json
import pyodbc


#read data from API
url = "http://nagiosdatagateway.vestas.net/esq/ITE1452552/logstash-2018.12.16/2/desc"
response = urllib.urlopen(url)
data = json.loads(response.read())

#define db connection
cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
                  "Server=DKCDCVDCP42\DPA;"
                  "Database=VPDC;"
                  "Trusted_Connection=yes;")
cursor = cnxn.cursor()
i = 0  
j = len(data)
print j
for i in range(0,2): 
   #print data[1]["_source"]["utc_timestamp"]
    print data[i]["_source"]["nagios_comment"]
    print data[i]["_source"]["nagios_author"]
    cursor.execute("insert into vpdc.pa.Pythontable(nagios_comment,nagios_author) 
    values (?,?)",(data[i]["_source"]["nagios_comment"],data[i]["_source"] 
     ["nagios_author"] ))
cnxn.commit()