Python 无法迭代元组列表MySQLdb

Python 无法迭代元组列表MySQLdb,python,mysql-python,Python,Mysql Python,我有以下代码,其中我尝试迭代一个元组: cust_list = ('138') for cust in cust_list: dbQuery = """ SELECT DISTINCT c.id, c.name, c.email FROM customers c WHERE c.id = %s; """

我有以下代码,其中我尝试迭代一个元组:

cust_list = ('138')

for cust in cust_list:
    dbQuery =  """
        SELECT DISTINCT
            c.id,
            c.name,
            c.email
        FROM
            customers c
        WHERE
            c.id = %s;
    """
    cur1.execute(dbQuery, cust)

    row = cur1.fetchone()
    cust_name = row[1]
    cust_email = row[2]
表customers包含一条记录,如下所示

id: 138
Name: Xoom Support
Email: support@example.com
我希望for循环对元组中的单个值运行一次,但是我得到了以下错误:

    Traceback (most recent call last):

      File "/usr/local/bin/stats-test.py", line 80, in <module>
        cust_name = row[1]
    TypeError: 'NoneType' object has no attribute '__getitem__'

我完全搞不清楚到底发生了什么。

好的,你对
1L
的混淆让我发现了错误。迭代一个只有一个数字的元组和一个有两个数字的元组是有区别的,区别在于没有逗号。实际上,
cust_list=('138')
的类型是String

在第一种情况下,您将迭代每个数字,而在第二种情况下,您将迭代每个数字。检查以下执行:

>>> cust_list = ('138')
>>> for cust in cust_list:
...   print cust
...
1
3
8
>>> cust_list = ('138','123')
>>> for cust in cust_list:
...   print cust
...
138
123
>>> cust_list = ('138',)
>>> for cust in cust_list:
...   print cust
...
138
要编写包含单个值的元组,必须包含逗号,即使只有一个值

重新定义元组以获得所需的执行:

>>> cust_list = ('138')
>>> for cust in cust_list:
...   print cust
...
1
3
8
>>> cust_list = ('138','123')
>>> for cust in cust_list:
...   print cust
...
138
123
>>> cust_list = ('138',)
>>> for cust in cust_list:
...   print cust
...
138

好的,您对
1L
的混淆使我发现了错误。迭代一个只有一个数字的元组和一个有两个数字的元组是有区别的,区别在于没有逗号。实际上,
cust_list=('138')
的类型是String

在第一种情况下,您将迭代每个数字,而在第二种情况下,您将迭代每个数字。检查以下执行:

>>> cust_list = ('138')
>>> for cust in cust_list:
...   print cust
...
1
3
8
>>> cust_list = ('138','123')
>>> for cust in cust_list:
...   print cust
...
138
123
>>> cust_list = ('138',)
>>> for cust in cust_list:
...   print cust
...
138
要编写包含单个值的元组,必须包含逗号,即使只有一个值

重新定义元组以获得所需的执行:

>>> cust_list = ('138')
>>> for cust in cust_list:
...   print cust
...
1
3
8
>>> cust_list = ('138','123')
>>> for cust in cust_list:
...   print cust
...
138
123
>>> cust_list = ('138',)
>>> for cust in cust_list:
...   print cust
...
138

错误是否发生在循环的第一次执行中?我的意思是,你打印的那一行是产生错误的那一行吗?而
1L
表示数字1和长型。@Javitronxo我以为这就是1L的意思,不知道为什么我会得到它。问题似乎出在单值元组上,如果我将元组设置为('138','123'),循环似乎工作正常:-/错误是否发生在循环的第一次执行中?我的意思是,你打印的那一行是产生错误的那一行吗?而
1L
表示数字1和长型。@Javitronxo我以为这就是1L的意思,不知道为什么我会得到它。问题似乎出在单值元组上,如果我将元组设置为('138','123'),循环似乎工作正常:-/理解,感谢您的完整解释。今天学习了一些关于元组的知识!明白了,谢谢你的解释。今天学习了一些关于元组的知识!