2015-02-09 2 views
1

У меня есть mysql db, которым я управляю через MAMP (с использованием порта 3306, сервер находится на порту 80). Я загрузил и установил библиотеку mysql-connector-python из Oracle и пытаюсь получить доступ к db и управлять им. Любопытно, что после уроков в http://dev.mysql.com/doc/connector-python/en/connector-python-tutorial-cursorbuffered.html я могу запустить запрос для вставки новых записей в определенную таблицу (пока я выдаю метод .commit() на моем коннекторе).выберите данные из mysql с помощью mysql-connector-python

Однако я не могу получить данные с помощью простой команды select. Таким образом, запрос «Select * from Assignments» возвращает None.

query = ('''SELECT title,description FROM `Assignments` LIMIT 0 , 30''') 

cursor = cnx.cursor() 
result = cursor.execute(query) 
print "result:",result 

#All assignment info 
for (title, description) in results: 
    print title, description 

я получаю ошибку "TypeError: объект '' NoneType не итерацию". Я считаю, что это связано с тем, что результатом выполненного запроса является None. B/c Я могу зафиксировать обновление и вставить изменения в db, я знаю, что я просто подключаюсь. Почему я не могу запустить простую команду SELECT и что-то получить?

ответ

2

Вам необходимо использовать способ MySQLCursor.fetchall для получения результатов.

cursor.execute(query) 
rows = cursor.fetchall() 

или

cursor.execute(query) 
head_rows = cursor.fetchmany(size=2) 
remaining_rows = cursor.fetchall() 
+0

Спасибо @ Александр! Это прекрасно работало. Интересно, почему это не упоминается на странице руководства по документации (http://dev.mysql.com/doc/connector-python/en/connector-python-example-cursor-select.html). Что есть, что приводит к ошибке (для меня). – staypuffinpc

0

Вам не нужно звонить fetchall, если вы посмотрите на документы, которые вы увидите не присвоение возвращаемого значения вызова выполнить как метод не возвращает ни, вы просто выполнить, а затем перебрать MySQLCursor/cursor объекта:

query = ('''SELECT title,description FROM `Assignments` LIMIT 0 , 30''') 

cursor = cnx.cursor() 

# forget assigning, just execute 
cursor.execute(query) 

# iterate over the cursor 
for (title, description) in cursor: 
    print title, description 
Смежные вопросы