当我在for循环中执行游标时出现以下错误。
Traceback (most recent call last):
File "mysql_select_query.py", line 35, in <module>
for row in cur.execute(sql_select):
TypeError: 'int' object is not iterable
这是我的错误代码:
sql_select = "SELECT * FROM T_EMP"
for row in cur.execute(sql_select):
print("{}, {}, {}, {}".format(row[0], row[1], row[2], row[3]))
当我执行&amp;使用fetchall():
sql_select = "SELECT * FROM T_EMP where ID>%s"
rows = cur.execute(sql_select, [0])
for row in cur.fetchall() :
print("{}, {}, {}, {}".format(row[0], row[1], row[2], row[3]))
我的MySQL表架构:
mysql> desc T_EMP;
+------------+-------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+-------------------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| CREATED | timestamp | NO | | CURRENT_TIMESTAMP | |
| EMP_CODE | varchar(20) | YES | | NULL | |
| USER_ID | int(11) | YES | | NULL | |
| FIRST_NAME | varchar(50) | NO | | NULL | |
| LAST_NAME | varchar(50) | NO | | NULL | |
| DEPT_ID | int(11) | YES | | NULL | |
| ADDR_ID | int(11) | YES | | NULL | |
+------------+-------------+------+-----+-------------------+----------------+
8 rows in set (0.00 sec)
任何线索都很感激。
感谢。
答案 0 :(得分:0)
PyMySQL Cursor.execute
返回 int
,即一个告诉受影响的行数的数字。它与MySQLConnector/Python的行为不匹配,当然您不能使用for
循环遍历单个数字。
在其他示例中使用fetchall
:
sql_select = "SELECT * FROM T_EMP"
cur.execute(sql_select)
for row in cur.fetchall():
print("{}, {}, {}, {}".format(row[0], row[1], row[2], row[3]))
或者逐行从光标迭代:
sql_select = "SELECT * FROM T_EMP"
cur.execute(sql_select)
for row in cur:
print("{}, {}, {}, {}".format(row[0], row[1], row[2], row[3]))
另请注意,DBAPI要求您为每个查询创建一个新游标,即
cur = connection.cursor()
在每个cur.execute
之前。
答案 1 :(得分:0)
你所做的事情根本就是错误的:
1- SELECT
语句按原样返回数据,但函数cur.execute()
返回迭代器,它是一个整数,然后在row[0], row[1], row[2], row[3]
中使用该整数,就像它可以被迭代一样(这显然不能用于一个简单的整数,没有第一个索引,第二个索引,第三个索引,第四个索引)
2-另一个函数cur.fetchall()
等于SELECT * FROM table
,但更复杂,因为它与此光标cur
尚未使用的数据同步,并且为你工作的代码不是以下部分(不是100%肯定通过注释掉其他两行来测试)
for row in cur.fetchall() :
print("{}, {}, {}, {}".format(row[0], row[1], row[2], row[3]))
所以,最好的答案是知道上面写的是什么,然后回到&#34;教室&#34;如果你知道我的意思,或者至少阅读如何使用python游戏类,那就是和平。