MysqlDB call TypeError: 'int' object is not iterable python
MysqlDB call TypeError: 'int' object is not iterable python
我是运行这样的查询:
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
我做错了什么?
Python MySQL(和其他数据库)连接器中的 .execute
调用不会直接 return 数据库结果。 (在这种情况下,它是 returning 匹配记录的数量)。
您必须进一步调用数据库驱动程序才能检索实际的 select
结果。更简单的方法是 .fetchall()
方法,它将 return 您所有选择的结果作为列表。
简而言之,将以下两行的调用更改为 execute
:
...
c.execute("SELECT post_title, post_name FROM wp_posts WHERE post_status='publish' ORDER BY RAND() LIMIT 3")
blogposts = c.fetchall()
我是运行这样的查询:
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
我做错了什么?
Python MySQL(和其他数据库)连接器中的 .execute
调用不会直接 return 数据库结果。 (在这种情况下,它是 returning 匹配记录的数量)。
您必须进一步调用数据库驱动程序才能检索实际的 select
结果。更简单的方法是 .fetchall()
方法,它将 return 您所有选择的结果作为列表。
简而言之,将以下两行的调用更改为 execute
:
...
c.execute("SELECT post_title, post_name FROM wp_posts WHERE post_status='publish' ORDER BY RAND() LIMIT 3")
blogposts = c.fetchall()