перебор выходных данных python mysql

#mysql #python-3.x #tuples #mysql-python

#mysql #python-3.x #кортежи #mysql-python

Вопрос:

код

 import mysql.connector
mydb=mysql.connector.connect(host="localhost",username="root",password="something",database="mrbean")

mycursor=mydb.cursor()
mycursor.execute("select * from store")

myresult=mycursor.fetchall()

for i in myresult:
    print(i)
 

это дает правильный вывод, но если мне нужна только одна строка
, которую я сделал так print(i)[1] , это дало мне сообщение об ошибке, почему?

ОШИБКА-

 (2010, 'Note Book', 25, None)
Traceback (most recent call last):
  File "C:/Users/sajim/Documents/python random programes/python mysql.py", line 10, in <module>
    print(i)[1]
TypeError: 'NoneType' object is not subscriptable

 

Комментарии:

1. Может быть, вам следует использовать print(myresult[1]) ? Потому что вам нужна первая строка результата?

2. нет, это дало все данные 2-го столбца в каждой строке

3. Затем вы можете изменить его на print(myresult[0]) , и оставить `для i в myresult:`

4. это дало мне правильный вывод, но если бы я хотел выполнить итерацию с использованием цикла for и напечатать только определенную строку. Это невозможно?

5. скажем, если я хочу напечатать только первые 5 строк или последние 5 строк, вручную записывая каждую, как вы сказали, занимает много времени

Ответ №1:

Вы закодировали:

 print(i)[1]
 

Это сначала выводит i-е значение myresult итерируемого, а затем пытается извлечь элемент № 1 из возвращаемого значения при вызове print . Но print функция возвращает None и поэтому вы получаете полученное вами исключение.

Если вам нужна одна строка:

 myresult = mycursor.fetchone()
print(myresult)
 

Если вы извлекли все строки:

 myresult = mycursor.fetchall()
print(myresult[0]) # first row
 

Если вы хотите напечатать первые пять строк:

 myresult = mycursor.fetchall()
for row in myresult[0:5]:
    print(row)
 

Но было бы разумнее просто получить только 5 строк, используя:

 mycursor.execute("select * from store limit 5")
myresult = mycursor.fetchall()
for row in myresult:
    print(row)
 

Если вы хотите напечатать последние 5 строк:

 myresult = mycursor.fetchall()
for row in myresult[-5:]:
    print(row)
 

Но вместо того, чтобы читать во всех строках, предположим, что столбец id был первичным ключом, а строки возвращались по id порядку (теоретически нет порядка для отношения, то есть таблицы, но на самом деле компонент database engine вернет строки в определенном порядке, который часто находится в первичном ключепорядок). Затем:

 mycursor.execute("select * from store order by id desc limit 5")
myresult = mycursor.fetchall()
for row in myresult:
    print(row)