2016-12-31 9 views
2

Я бегу вопрос как:MySQLDb вызов TypeError: «INT» объект не итерацию питон

SELECT post_title, post_name FROM wp_posts WHERE post_status='publish' ORDER BY RAND() LIMIT 3 

, который выводит информацию, как:

ID post_title  post_name 
1 a title here  a-title-here 
2 a title here2  a-title-here2 
3 a title here3  a-title-here3 

и пытается вызвать его в app.py для колбы :

@app.route('/', methods=('GET', 'POST')) 
def email(): 
     blogposts = c.execute("SELECT post_title, post_name FROM wp_posts WHERE post_status='publish' ORDER BY RAND() LIMIT 3") 

     return render_template('index.html', form=form, blogposts=blogposts) 

В моем шаблоне, я звоню blogposts как:

{% for blogpost in blogposts %} 
    <li><a href="{{blogpost[1]}}">{{blogpost[0]}}</a></li> 
    {% else %} 
    <li>no content...</li> 
    {% endfor %} 

Но Im получаю ошибку:

{% for blogpost in blogposts %} 
TypeError: 'int' object is not iterable 

Что я делаю неправильно здесь?

+0

как вы получите '' blogposts' в электронной почте() '? кажется, что это некоторое число, а не список или строки. – furas

+0

См. Дополнения выше. 'blogposts' - это буквально запрос к mysql – Jshee

+0

check' print (blogposts) 'в' email() ', чтобы узнать, что вы получаете. – furas

ответ

3

.execute звонки в Python Соединители MySQL (и другие базы данных) не возвращают результаты базы данных напрямую. (В этом случае он возвращает количество согласованных записей).

Чтобы получить фактические результаты select, вам необходимо обратиться к драйверу базы данных. Более простым является метод .fetchall(), который вернет вам все выбранные результаты в виде списка.

Короче говоря, измените вызов execute для этих двух линий:

... 
c.execute("SELECT post_title, post_name FROM wp_posts WHERE post_status='publish' ORDER BY RAND() LIMIT 3") 
blogposts = c.fetchall() 

 Смежные вопросы

  • Нет связанных вопросов^_^