列表内的单个逗号分隔元组

Single comma separated tuple inside of a list

我正在使用 pyodbc 处理带有输出的执行存储过程。

import pyodbc
conn = pyodbc.connect('DRIVER=' + driver + ';PORT=1433;SERVER=' + server +
                      ';PORT=1443;DATABASE=' + database + ';UID=' + username + ';PWD=' + password)
cmd = conn.cursor()
sql = """\
Too long to post
"""
params = ('EOXH39020220', 'EOXH39020245', 'EOXH3E360011')
for item in params:
    cmd.execute(sql, item)
    rst = cmd.fetchall()
    print(rst)
conn.close

我正在测试的特定存储过程的输出结果如下:

[(False, 1, 3, 2, 967, 6, 'ABC-DE-FGHI', 'LOREM', 'IPSUM', 'CLASS PRODUCT', 'F/P', 'LABELDESCRIPTION', 'N/A', 'DESCRIPTION', 'ASL66', 'ASL10', '3FE50712BA', 'ABC-DE-FGHI', 'PO', 'ITEM#', 'OEM#', 'F/P', '1')]
[(False, 1, 4, 1, 967, 7, 'ABC-DE-FGHI', 'LOREM', 'IPSUM', 'CLASS PRODUCT', 'F/P', 'LABELDESCRIPTION', 'N/A', 'DESCRIPTION', 'ASL66', 'ASL10', '3FE50712BA', 'ABC-DE-FGHI', 'PO', 'ITEM#', 'OEM#', 'F/P', '1')]
[(False, 1, 4, 2, 967, 8, 'ABC-DE-FGHI', 'LOREM', 'IPSUM', 'CLASS PRODUCT', 'F/P', 'LABELDESCRIPTION', 'N/A', 'DESCRIPTION', 'ASL66', 'ASL10', '3FE50712BA', 'ABC-DE-FGHI', 'PO', 'ITEM#', 'OEM#', 'F/P', '1')]

我不能在上面使用 .split,因为它不是真正的字符串。如何拆分列表中元组的内容?我想要做的是将结果分解为变量以供使用。我没有得到我期望看到的结果。例如:

testlist = [(False, 1, 3, 2, 967, 6, 'ABC-DE-FGHI', 'LOREM', 'IPSUM', 'CLASS 1 PRODUCT', 'F/P', 'DESCRIPTION', 'N/A', 'DESCRIPTION', 'ASL66', 'ASL10', '3FE50712BA', 'ABC-DE-FGHI', 'PO', 'ITEM#', 'OEM#', 'F/P', '1')]
for i in testlist[0]:
    print(testlist[0][i])

结果:

False 1 2 3

正如 roganjosh 所建议的,我完全错过了我在循环中需要的东西。 前 5 项例如:

testlist = [(False, 1, 3, 2, 967, 6, 'ABC-DE-FGHI', 'LOREM', 'IPSUM', 'CLASS PRODUCT', 'F/P', 'LABELDESCRIPTION', 'N/A', 'DESCRIPTION', 'ASL66', 'ASL10', '3FE50712BA', 'ABC-DE-FGHI', 'PO', 'ITEM#', 'OEM#', 'F/P', '1')]

newlist = []

for x in testlist[0]:
    newlist.append(x)

print(newlist[:5])

[False, 1, 3, 2, 967]

这个问题有点混乱,但我们在评论中确定了这个问题。您的标题在从 fetchall() 返回的内容中大部分是准确的:一个包含单个元组的列表, 而不是 字典,正如您继续陈述的那样。

fetchall() 通常在您期望多个匹配项时使用,其中每一行都是列表中的一个元组(因此您可以考虑使用 fetchone(),如@Barmar 在评论中所述,如果您总是得到一个结果)。

在评论中,您声明您尝试了以下方法但没有奏效:

for i in testlist[0]: 
    print(testlist[0][i])

它不会 - testlist[0] 允许您访问元组,但随后您尝试访问它,就好像它是以 i 为键的字典一样。相反,i 是分配给该元组中每个项目的名称。

解决方法很简单:

for i in testlist[0]: 
    print(i)