TypeError:'int'对象不可迭代 - Python

时间:2015-02-06 12:13:07

标签: python mysql python-2.7 mysql-python

我收到以下错误:

  File "/home/ec2-user/test/test_stats.py", line 43, in get_test_ids_for_id
    cursor.execute("""select test_id from test_logs where id = %s """, (id))
  File "/home/ec2-user/.etl/lib/python2.7/site-packages/MySQLdb/cursors.py", line 187, in execute
    query = query % tuple([db.literal(item) for item in args])
TypeError: 'int' object is not iterable

以下是我遇到问题的代码部分:

def get_test_ids_for_id(prod_mysql_conn, id):
    cursor = prod_mysql_conn.cursor()
    cursor.execute("""select test_id from test_logs where id = %s """, (id))
    rows = cursor.fetchall()
    test_ids = []
    for row in rows:
      test_ids.append(row[0])
    return test_ids

2 个答案:

答案 0 :(得分:18)

你需要给cursor.execute一个元组,但你只给它一个整数:

(id)

添加逗号以使其成为元组:

(id,)

然后全线为:

cursor.execute("""select test_id from test_logs where id = %s """, (id,))

在括号中加上表达式' groups'那一个表达。 逗号是一个元组:

>>> (42)
42
>>> (42,)
(42,)

任何可迭代都可以,所以你也可以使用[...]括号:

cursor.execute("""select test_id from test_logs where id = %s """, [id])

答案 1 :(得分:0)

基本上,发生的是当您在查询中传递参数时,它不会变成可迭代的,因为它放在括号中。 为了使其可迭代,您需要以列表或元组之类的形式进行迭代。所以,您可以在逗号(1,)的末尾添加逗号,也可以将其作为列表[1]。