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

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

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

Вместо этого я получаю: {{Х0}}

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

0
Alessandro 29 Май 2019 в 15:05

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)
0
Samaritan_Learner 29 Май 2019 в 12:14

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

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

myresult = cursor.fetchall()
for x in myresult:
    print(x)
0
sridhar er 29 Май 2019 в 12:25