MysqlDB调用TypeError:'int'对象不是可迭代的python

时间:2016-12-31 02:18:37

标签: python flask iterable

我正在运行如下查询:

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 %}

但我得到的错误是:

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

我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

Python MySQL(和其他数据库)连接器中的.execute调用不直接返回数据库结果。 (在这种情况下,它返回匹配记录的数量)。

您必须再次调用数据库驱动程序以检索实际的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()