我很抱歉,我无法为我的问题提供更好的标题。 我是Python编程的新手,我必须对应用程序中的现有代码进行一些小改动。 当前的python代码读取Excel工作表中的每一行和每一列,并将其存储在名为“Commits”的表中的DB中。 我们使用的数据库是SQL Lite和我们正在使用的python库是sqlite3.py 在现有代码中,只有6列插入DB中,因为它来自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是一个简单地将插入查询传递给DB以插入数据集的函数。
FOllowing是csvrowgenerator的代码: -
def csvrowgenerator(filepath):
with open(filepath, encoding="utf8") as f:
for row in csv.reader(f):
yield row
现在我的要求是在读取Excel工作表中的每一列时,我们必须将第二列作为输入传递给Select Join查询,该查询将返回一组两列,并且每个列值都需要在上面的集合中传递在将它插入数据库之前,将简短的for循环。
我编写了一个函数,在从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返回,Input是jenkinsentry [2]},{Value-2从DB返回,输入是jenkinsentry [2]}),用于csvrowgenerator(filepath)中的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
但是上面的代码只运行一次而不会遍历行中的所有项目。我尝试使用yield而不是return。它在以下行中给出错误: - jenkinsdataset = list(chain.from_iterable(jenkinsdataset_lists))
下面是我的For循环代码返回的print语句的输出: -
詹金斯数据集......第一项...... [['922','sdsadad','测试套件挂钩 s','Test Suite Hooks','','','2018-05-23 01:00:00','pass','None', '无']
以下是输出如何形成实际代码“return [(jenkinsentry [0],jenkinsentry [1],jenkinsentry [3],jenkinsentry [2],jenkinsentry [4],jenkinsentry [5], str(dateparser.parse(jenkinsentry [6],ignoretz = True)),jenkinsentry [7])for csvrowgenerator(filepath)中的jenkinsentry]“
jenkins数据集..第一项.... [[('922','sdsadad','测试套件 Hooks','Test Suite Hooks','','','2018-05-23 01:00:00','pass','', ''),(''922','sdsadad','abc / ssdsd','Quebjhfghjhdg aeuyruyiyd','', '','2018-05-23 01:00:00','通过','',''),('922','sdsadad', 'abc / ssdsd','Quebjhfghjhdg aeuyruyiyd','','','2018-05-23 01:00:00','通过','','')]]
请帮我组建一个集合,它从exisiting for循环中获取输入并正确解析为列表(chain.from_iterable(jenkinsdataset_lists))
答案 0 :(得分: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