2017-11-10 8 views
-1

forループでカーソルを実行すると、次のエラーが発生します。ここでPython/MySQLがエラーを返します: - TypeError: 'int'オブジェクトが反復可能ではありません

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])) 

私は&使用は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) 

任意のc lueは感謝しています。

ありがとうございました。

答えて

0

PyMySQL​​は、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])) 

または行でカーソル行から反復:DBAPIあなたはクエリごとに新しいカーソルを作成する必要があることも

sql_select = "SELECT * FROM T_EMP" 
cur.execute(sql_select) 
for row in cur: 
    print("{}, {}, {}, {}".format(row[0], row[1], row[2], row[3])) 

お知らせすなわち、

cur = connection.cursor() 

cur.executeの前に。何をやっている

+0

彼に「なぜ」を理解させる方が良いですか?問題の中に書かれたことを他の言葉で再記述するだけではありません。 – YEH

+0

私はそれを得た。ありがとう。 – KiranM

0

は根本的に間違っている:

の1- SELECTの文が返すデータはあるが、それができるかのように機能cur.execute()はその後row[0], row[1], row[2], row[3]にその整数を使用して、整数であるイテレータを返すようそれは何と同期するので反復

2-他の機能cur.fetchall()SELECT * FROM tableに等しいが、より複雑である(明らかに単純な整数とすることができず、全く最初のインデックス、第2のインデックス、第3のインデックス、第四のインデックスありません)このカーソルによってそのデータのまだ使用されていないcurとコードはwoですあなたのためにされていないrkingが、次の部分(100%確実ではない、他の2行をコメントアウトすることによってテストので)

for row in cur.fetchall() : 
    print("{}, {}, {}, {}".format(row[0], row[1], row[2], row[3])) 

だから、最高の答えは上に書いているものを知ることになると、その後に戻ります」私が何を意味するか知っているか、少なくともPythonのカーソルクラス、平和を使う方法を読んでいれば教室です。

関連する問題