繁体   English   中英

如何将 cursor.execute() 结果作为字符串(不是元组)?

[英]How to get cursor.execute() results as String (not tuple)?

我正在尝试实现一个(简单的)论坛风格的网络应用程序。 我目前正在尝试在 web 页面上显示我的数据库中的线程标题(“主题”)。 我正在使用 mysql 连接器 cursor 与数据库进行交互,当返回结果时,我想以纯字符串格式显示它们,而不是 Z1791A97A8403730EE0760489A2AEB99 的元组返回,但我无法找到一种方式cursor。 有没有人知道在不改变我与数据库交互方式的情况下做到这一点的方法?

这是我获取主题标题并将它们传递到我呈现它们的模板的代码:

 cursor.execute('SELECT title FROM topics;')
    topics = cursor.fetchall()
    return render_template('forumIndex.html', topics=topics)

这是模板中的 jinja 代码,它将主题标题呈现到页面上的无序列表中:

{% for topic in topics %}
<ul class="topic-list" id="topics">
    <li class="topic-list-item">{{ topic }}</li>
</ul>
{% endfor %}

标题以元组形式输出到页面上,如下所示:

('测试',)

('这是一个主题标题',)

(“一个惊人的标题”,)

我想我不太了解 cursor 的工作原理,无论我读了多少。 如果有人能够解释我哪里出错了,甚至只是指出我不理解哪些领域,将不胜感激。

谢谢你。

MySql 连接器符合 PEP249 中指定的 Python DBAPI。 因此,需要fetchall方法返回“序列序列”,这意味着您必须从该方法接收元组列表。 您可以做的是操纵该序列以根据需要显示它。 go 关于它有多种方法,但一种简单的方法是修改返回topics变量的方式:

return render_template('forumIndex.html', topics=[topic[0] for topic in topics]) # go from [('item',), ...] to ['item', ...]

如果您有大量主题,则可以通过在渲染模板中更改它来提高效率,这样您就不会重复数据两次。

这也应该有效:

{% for topic in topics %}
<ul class="topic-list" id="topics">
    <li class="topic-list-item">{{ topic[0] }}</li>
</ul>
{% endfor %}

嘿,你可以对结果进行切片。

For n in topics:
  Val1=str(n)
  Val1=val1[2 : len(val1) -3]
  Print(val1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM