Метод fetchall()
возвращает list
из tuples
. Из документов:
Метод выбирает все (или все оставшиеся) строки из набора результатов запроса.
и возвращает список кортежей. Если больше нет доступных строк, это
возвращает пустой список.
Итак, в этом разделе ваш код:
myresult = mycursor.fetchall()
for x in myresult:
print(x.password)
myresult
- это список, а x
- это tuple
.
Вместо использования необработанного курсора существует класс курсора MySQLCursorNamedTuple . Это позволит вам получить доступ к столбцам с синтаксисом поиска атрибутов без необходимости создания экземпляра класса.
Вот документированный пример:
cnx = mysql.connector.connect(database='world')
cursor = cnx.cursor(named_tuple=True)
cursor.execute("SELECT * FROM country WHERE Continent = 'Europe'")
print("Countries in Europe with population:")
for row in cursor:
print("* {Name}: {Population}".format(
Name=row.Name,
Population=row.Population
))
Кроме того, вы можете попробовать MySQLCursorDict
, который вернет сопоставление имен столбцов со значениями.
Вы можете легко преобразовать результат dict
в экземпляр вашего объекта, например ::101033.
myresult = dictcursor.fetchall()
for x in myresult:
inst = Item(**x)
print(inst.password)
Или используйте ORM, например SQLAlchemy , который звучит так, как будто он может удовлетворить ваши потребности.