2015-12-25 2 views
3

Я работаю над связью базы данных в Python 3.4. В моей базе данных есть два столбца.Как Iterate через cur.fetchall() в Python

Ниже запрос, который дает мне все данные из двух столбцов в показанном формате QUERY:

cur.execute(""" select * from filehash """) 
data=cur.fetchall() 
print(data) 

ВЫВОД:

[('F:\\test1.py', '12345abc'), ('F:\\test2.py', 'avcr123')] 

Повторить через этот выход, мой код, как показано ниже

cur.execute(""" select * from filehash """) 
data=cur.fetchall() 

i=0 
j=1 

for i,row in data: 
    print(row[i]) 
    print(row[j]) 
    i=i+1 

Это дает мне ошибку ниже

print(row[i]) 
TypeError: string indices must be integers 

Позвольте мне знать, как мы можем работать над отдельными значениями fetchall()

+0

@ Redbeard011010 repzero zvone Я могу idivudally доступа как строки [0], строка [1] но когда я цикл его с помощью для I, J в данном: печати (данные [I]) печати (данные [J]) Я получаю ниже ошибки печати (данные [я]) TypeError: индексы список должны быть целыми, не ул же для перечислять (данных), а также – npormambi

+0

@ Redbeard011010 repzero zvone Я могу получить доступ к idivudally как ro ш [0], строка [1] но когда я цикл его с помощью для I, J в данных: печати (данные [I]) печати (данные [J]) Я получаю ниже ошибки печати (данные [я]) TypeError: индексы список должны быть целыми, не ул же для перечислять (данные), а также – npormambi

ответ

1

Чтобы перебрать и печати строк из cursor.fetchall() вы просто хотите сделать:

for row in data: 
    print row 

Вы также должны быть в состоянии для доступа к индексам строки, например row[0], row[1], iirc.

Конечно, вместо печати строки вы можете манипулировать данными этой строки, но вам нужно. Представьте, что курсор - это набор строк/записей (это почти все, что есть).

2

Похоже, что в таблице есть две колонки, поэтому каждая строка будет содержать два элемента.

Это проще всего перебирать их таким образом:

for column1, column2 in data: 

То есть так же, как:

for row in data: 
    column1, column2 = row 

Вы можете также, как вы пытались:

for row in data: 
    print row[0] # or row[i] 
    print row[1] # or row[j] 

Но это произошло, потому что вы перезаписали i со значением первого столбца, в этой строке: for i, row in data:.

EDIT

BTW, в общем, вы никогда не необходимости этот шаблон в Python:

i = 0 
for ...: 
    ... 
    i += 1 

Вместо этого, он является общим, чтобы сделать просто:

for item in container: 
    # use item 

# or, if you really need i: 
for i, item in enumerate(container): 
    # use i and item 
+0

очень описательный .....: D – repzero

+0

Здравствуйте Redbeard011010 repzero zvone ... – npormambi

+0

@ Redbeard011010 repzero zvone Я могу idivudally доступ как строки [0], строка [1] но когда я цикл его с помощью для I, J в данных: печати (данные [I]) печати (данные [J]) Я получаю ниже ошибки печати (данные [я]) TypeError: индексы список должны быть целыми, не ул же для перечислять (данных), а также – npormambi

1

глядя на

[('F:\\test1.py', '12345abc'), ('F:\\test2.py', 'avcr123')] 
    i    j     i   j 

вы принимаете строки я и J и индексация его как

print(row['F:\\test1.py']) 
    print(row['12345abc']) 

, который дал вам TypeError

TypeError: string indices must be integers 

это потому, что я в данных является строкой и ваша индексация это

попробовать это

for i,j in data: 
    print(i) 
    print(j) 
+0

Здравствуйте, repzero, Я попробовал ссылку, показанную вами, все еще не работает с использованием базы данных Mysql ... – npormambi

+0

удалите переменные «j = 1» и «i = 0» и «i = i + 1» из вашего коды и содержат ли ваши переменные данных «[('F: \\ test1.py', '12345abc'), ('F: \\ test2.py', 'avcr123')]"? .... print (data), чтобы убедиться, что это истинное значение – repzero

0

Как отпечатанной данного [('F:\\test1.py', '12345abc'), ('F:\\test2.py', 'avcr123')]

for i, row in data: 
    print(i) # i is column1's value 
    print(row)# row is column's value 

Так что вам не нужна строка [I] или строка [J], что был не прав, в том, что каждый шаг этой итерация

for i, row in data 

является так же, как i, row = ('abc', 'def') он установлен abc переменной i и «четкости» в row

Кстати, я не знаю, какую базу данных вы используете, если вы используете Mysql и драйвер питон MySQL Connector, вы можете проверить это руководство на fetch mysql result as dictionary , вы можете получить dict на итерации, а ключи - имя вашего поля таблицы. Я думаю, что этот метод удобнее.

Смежные вопросы