【问题标题】:Unable to insert all rows into SQL table using python script无法使用 python 脚本将所有行插入 SQL 表
【发布时间】:2019-01-03 13:37:33
【问题描述】:

我的 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 亚历克斯·克里斯托弗·拉莫斯

【问题讨论】:

  • 请修正代码缩进。
  • i += 1 在 for 循环中不需要。那是因为range(i, j-1) 返回一个可迭代对象,并且 for 会自动迭代它。
  • 另外,i += 1 不会更改范围生成器。
  • 欢迎来到 SO。在 Python 中,缩进很重要(它是语言语法的一部分),因此没有人可以帮助您解决 sn-p 损坏的缩进。请编辑您的帖子以修复缩进,使其完全与您自己的代码匹配。
  • 是的,谢谢@brunodesthuilliers。当您提到缩进时,我再次尝试缩进 cursor.execute 语句。之前在循环之外。我现在纠正了它并且工作得很好。

标签: python sql json


【解决方案1】:

问题已通过正确缩进脚本中的 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()

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 2021-07-13
    • 2021-06-12
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 2022-12-05
    • 2011-03-15
    • 2019-03-20
    相关资源
    最近更新 更多