Как исправить "объект типа 'int' не имеет len ()" в Python3 - PullRequest
0 голосов
/ 01 февраля 2019

Я новичок в программировании на Python.Я пытаюсь подключиться к MySQL из Python.Моя цель - извлечь rows из table, когда пользователь щелкнет по «View» button в графическом интерфейсе, и отобразить их на listbox, который я разработал с помощью компоновщика Page gui для Python.Я поместил коды подключения к базе данных в функцию init сгенерированного файла Tkinter и создал функцию showdetails(self) для обработки извлечения строк из таблицы.Я уверен, что соединение с базой данных работает.Однако, когда я запускаю его, я получаю object of type 'int' has no len() error.Я действительно не знаю, что может быть ответственным.Мне нужна помощь, пожалуйста.

Я попытался написать код в файле, отличном от файла Tkinter, с небольшими изменениями, и он отлично работает.Строки в указанной таблице были получены в консоли

Некоторые строки моих кодов

import pymysql.cursors

def showdetails(self):

    try:
        with self.conn.cursor() as cursor:
            sql = cursor.execute("SELECT * FROM `students`")
            for i in range(0, len(sql)):
                self.listBox.insert(i, sql.rows[i])
    except Exception as e:
        print(e)

def __init__(self, top=None):
    # connect to database
    try:
      self.conn = pymysql.connect('localhost', 'root', 'victor16', 'students', charset='utf8mb4',
                         cursorclass=pymysql.cursors.DictCursor)
    except Exception as e:
      print(e, ': could not connect to database')

Я хочу, чтобы listbox отображал rows из базы данных, но это не так.

1 Ответ

0 голосов
/ 02 февраля 2019

Переменная 'sql' захватывает количество записей SQL-запроса, поэтому вам не нужно использовать функцию 'len'.

В качестве альтернативы вы можете использовать len (sql.rows) в своемпетля!

...