Я работаю с 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(). 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)
Я уже разместил тот же ответ выше, я надеюсь, что это повторный ответ.
Вы пропустили метод Fetchall() для получения записей. Не могли бы вы попробовать ответ ниже и проверить его. @Алессандро