MySQL (python 3.6) – SELECT * FROM table – возвращает количество строк вместо таблицы

Я работаю с MySQL, но у меня неожиданное поведение. У меня есть прошлый опыт работы с SQLite, но я думаю, что здесь что-то упускаю.

Используя запрос SELECT * FROM tableName, я ожидаю, что содержимое таблицы будет выводом. Вместо этого я получаю int, являющийся количеством строк в таблице. Вот кусок кода, который я использую.

import MySQLdb

conn=MySQLdb.connect(host = "xxx",user = "xxx",passwd = "xxx")
cursor = conn.cursor()
cursor.execute("create database if not exists Test;")
cursor.execute("use Test;")
cursor.execute("create table if not exists City (id int not null primary key auto_increment, city varchar(50), unique(city));")
cursor.execute("insert into City (city) values ('Firenze');")
cursor.execute("insert into City (city) values ('Roma');")
conn.commit()
print(cursor.execute("select city from City;"))

Я ожидал бы получить:

Firenze
Roma

Вместо этого я получаю: 2

Если я запускаю тот же запрос из клиента SQL, я получаю ожидаемый результат. Любая умная идея? Спасибо :)

Вы пропустили метод Fetchall() для получения записей. Не могли бы вы попробовать ответ ниже и проверить его. @Алессандро

Samaritan_Learner 29.05.2019 15:01
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
253
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В вашем коде отсутствует функция FetchAll(). Fetch all — это не что иное, как выборка данных последнего выполненного оператора.

import MySQLdb
conn=MySQLdb.connect(host = "xxx",user = "xxx",passwd = "xxx")
cursor = conn.cursor()
cursor.execute("create database if not exists Test;")
cursor.execute("use Test;")
cursor.execute("create table if not exists City (id int not null primary key 
auto_increment, city varchar(50), unique(city));")
cursor.execute("insert into City (city) values ('Firenze');")
cursor.execute("insert into City (city) values ('Roma');")
conn.commit()
print(cursor.execute("select city from City;"))
myresult = mycursor.fetchall()
for x in myresult:
print(x)

Дело в том, что print(cursor.execute("select city from City;") возвращает вам количество строк или количество строк.

Для полных записей используйте что-то вроде этого

myresult = cursor.fetchall()
for x in myresult:
    print(x)

Я уже разместил тот же ответ выше, я надеюсь, что это повторный ответ.

Samaritan_Learner 29.05.2019 14:59

Другие вопросы по теме

Похожие вопросы