如何解决创建多个字典时,分块列表抛出“ zip参数2必须支持迭代”
为了将请求批量发送,我将一个分块列表转换成多个字典时遇到问题:
fd = open(filename,'r')
sqlFile = fd.read()
fd.close()
commands = sqlFile.split(';')
for command in commands:
try:
c = conn.cursor()
c.execute(command)
// create a list with the query results with batches of size 100
for batch in grouper(c.fetchall(),100):
// This is where the error occurs:
result = [dict(zip([key[0] for key in c.description],i)) for i in batch]
# Todo: Send the json with 100 items to API
except RuntimeError:
print('Error.')
问题在于,它仅对批次进行一次迭代,并产生以下错误。实际上,行数为167。因此,应该在第一个请求中发送100个项目,而第二次迭代应该包含在第二个请求中发送的67个项目。
TypeError: zip argument #2 must support iteration
解决方法
我通过使用c.rowfactory = makeDictFactory(c)
立即制作字典来解决了这个问题:
def makeDictFactory(cursor):
columnNames = [d[0] for d in cursor.description]
def createRow(*args):
return dict(zip(columnNames,args))
return createRow
def getAndConvertDataFromDatabase:(filename)
fd = open(filename,'r')
sqlFile = fd.read()
fd.close()
commands = sqlFile.split(';')
for command in commands:
try:
c = conn.cursor()
c.execute(command)
c.rowfactory = makeDictFactory(c)
data = c.fetchall()
for batch in [data[x:x+100] for x in range(0,len(data),100)]:
return postBody(json.dumps(batch,default = myconverter),dataList[filename])
except RuntimeError:
print('Error.')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。