0

很抱歉我无法为我的问题提供更好的标题。我对 Python 编程非常陌生,我必须对应用程序中的现有代码进行一些小改动。当前的 python 代码读取 Excel 工作表中的每一行和每一列,并将其原样存储在数据库中名为“Commits”的表中。我们使用的数据库是 SQL Lite,我们使用的 Python 库是 sqlite3.py 在现有代码中,只有 6 列插入到数据库中,因为它来自 excel 表。以下是它的代码:-

def constructjenkinsdata(filepath):
    return [(jenkinsentry[0], jenkinsentry[1], jenkinsentry[3],jenkinsentry[2],jenkinsentry[4],jenkinsentry[5],str(dateparser.parse(jenkinsentry[6],ignoretz=True)),jenkinsentry[7]) for jenkinsentry in csvrowgenerator(filepath)]

def loadjenkinsdata(jenkinssource, concurrency=3):
    p = Pool(concurrency)
    jenkinsdataset_lists = p.map(constructjenkinsdata, jenkinssource)
    jenkinsdataset = list(chain.from_iterable(jenkinsdataset_lists))
    persistjenkinsdata(jenkinsdataset, batchid)

在上面的代码中,persistjenkinsdata 是一个简单地将插入查询传递给数据库以插入数据集的函数。

以下是 csvrowgenerator 的代码:-

def csvrowgenerator(filepath):
with open(filepath, encoding="utf8") as f:
     for row in csv.reader(f):
         yield row

现在我的要求是,在读取 excel 表中的每一列时,我们必须将第二列作为输入传递给 Select Join 查询,该查询将返回一组两列,并且每列值需要在上述短集合中传递在将其插入数据库之前将其传递给循环。

我编写了一个函数,该函数在从 DB 获取值后返回相应的值,当我传递静态输入时,该函数正确返回输出。但我不知道如何将输入从上述 for 循环动态传递给该函数。如何更改以下代码行以包含另外两个要传递到数据集中的参数。我需要如下:- return [(jenkinsentry[0], jenkinsentry[1], jenkinsentry[3],jenkinsentry[2],jenkinsentry[4],jenkinsentry[5],str(dateparser.parse(jenkinsentry[6] ],ignoretz=True)),jenkinsentry[7], {Value-1 从 DB 返回,输入是 jenkinsentry[2]},{Value-2 从 DB 返回,输入是 jenkinsentry[2]}) 用于 csvrowgenerator 中的 jenkinsentry (文件路径)]

我对python很陌生,所以我不知道如何更改这个循环的简写来相应地更改集合。我尝试了以下方法:-

def constructjenkinsdata(filepath):
    columns = []
    for jenkinsentry in csvrowgenerator(filepath):
      buildNo = jenkinsentry[0]
      #print('Build NO .. ' + buildNo)
      columns.append(buildNo)
      url = jenkinsentry[1]
      columns.append(url)
      #print('URL....'+url)
      testCaseName = jenkinsentry[2]
      columns.append(testCaseName)
      className = jenkinsentry[3]
      columns.append(className)
      crid = jenkinsentry[4]
      columns.append(crid)
      errorDetails = jenkinsentry[5]
      columns.append(errorDetails)
      createTime = str(dateparser.parse(jenkinsentry[6],ignoretz=True))
      columns.append(createTime)
      print('Create time.....' + str(createTime))
      status = jenkinsentry[7]
      columns.append(status)
      print('Test Case Name....' + testCaseName)
      lastFailedBuildIDAndCreateTime = returnbuildIDAndCreatedateSet(testCaseName)
      lastFailedBuildID = str(lastFailedBuildIDAndCreateTime[0])
      print('Last Failed build ID .....' + str(lastFailedBuildID))
      columns.append(lastFailedBuildID)
      lastFailedCreateTimeString = str(lastFailedBuildIDAndCreateTime[1])
      columns.append(lastFailedCreateTimeString)
      print('Last Failed Create Time .....' + str(lastFailedCreateTimeString))
      #jenkinsColumnCollection.append(columns)
      return columns

但是上面的代码只运行一次,不会遍历行中的所有项目。当我尝试使用产量而不是回报时。它在以下行中给出错误:- jenkinsdataset = list(chain.from_iterable(jenkinsdataset_lists))

下面是从我的 For 循环代码返回的 print 语句的输出:-

jenkins 数据集.. 第一项.... [['922', 'sdsadad', 'Test Suite Hook s', 'Test Suite Hooks', '', '', '2018-05-23 01:00: 00','通过','无','无']]

以下是如何使用“return [(jenkinsentry[0],jenkinsentry[1],jenkinsentry[3],jenkinsentry[2],jenkinsentry[4],jenkinsentry[5],str(dateparser .parse(jenkinsentry[6],ignoretz=True)),jenkinsentry[7]) for jenkinsentry in csvrowgenerator(filepath)]"

jenkins 数据集.. 第一项.... [[('922', 'sdsadad', 'Test Suite Hooks', 'Test Suite Hooks', '', '', '2018-05-23 01:00: 00', 'pass', '', ''), ('922', 'sdsadad', 'abc/ssdsd', 'Quebjhfghjhdg aeuyruyiyd', '', '', '2018-05-23 01:00: 00', 'pass', '', ''), ('922', 'sdsadad', 'abc/ssdsd', 'Quebjhfghjhdg aeuyruyiyd', '', '', '2018-05-23 01:00: 00', '通过', '', '')]]

请帮助我形成一个集合,该集合从现有的 for 循环中获取输入并正确解析为 list(chain.from_iterable(jenkinsdataset_lists))

4

1 回答 1

0

让我们看看你的代码

def constructjenkinsdata(filepath):
    columns = []
    for jenkinsentry in csvrowgenerator(filepath):
      ...
      return columns

return columns在第一次迭代结束时。它应该是:

def constructjenkinsdata(filepath):
    columns = []
    for jenkinsentry in csvrowgenerator(filepath):
       ...
    return columns
于 2018-05-29T07:56:09.253 回答