【问题标题】:Remove unicode in Python from database?从数据库中删除 Python 中的 unicode?
【发布时间】:2015-03-07 00:14:42
【问题描述】:

我有一个 Flask 网站,我想将 SQLite3 表中的值列表分配给一个变量。我设法做到了,但是列表中的每个项目都显示如下值:[u'Chemistry'] 但是我只希望它显示'Chemistry'。

这是我的代码:

cur = g.db.execute("SELECT DISTINCT subject FROM questions")
subjectList = [list(row) for row in cur.fetchall()]

我寻找的答案包括在行周围使用 str() 将其转换为字符串并将值列的类型更改为 Blob,但均无效。我将如何解决这个问题?谢谢。

【问题讨论】:

  • 您如何使用subjectList?你在做{{ subjectList }}之类的事情吗?

标签: python database sqlite flask


【解决方案1】:

当你查询 SQLite 时,你会得到类似的结果

[('value 1',), ('value 2',)]

然后您使用列表推导,将每条记录转换为列表。这会让你得到类似的东西

[['value 1'], ['value 2']]

相反,您可能希望从结果中的每个元组中提取第一项以获得所需的列表。

subjectList = [row[0] for row in cur.fetchall()]

这会得到你

['value 1', 'value 2']

使用此版本的subjectList,您可以在模板中使用以下内容。

{% for subject in subjectList %}
    {{ subject }}
{% endfor %}

【讨论】:

  • 我就是这么弄的,但是格式还是[u'Chemistry']
  • 如果有括号,那不是你的做法,除非subjectList 是一个列表列表。
  • 不,SQLite 查询应该返回类似 ['Chemistry', 'History', 'Maths'] 的东西,而不是列表中的列表
【解决方案2】:

尝试使用编码:

>>>a = u'test'
>>>a
u'test'
>>> a.encode('ascii')
'test'

你的代码:

subjectList = [list(row) for row in cur.fetchall()]

列表理解将输出转换为列表:list(row)
如果你把它改成

subjectList = [row.encode('ascii') for row in cur.fetchall()]

【讨论】:

  • 由于某种原因,我收到一条错误消息:AttributeError: 'tuple' object has no attribute 'encode'
  • 对不起,因为我不直接熟悉flask和sqllite,但这意味着你的var row是一个元组,所以......你可以只使用row的第一个索引...... row[0 ].encode('ascii')
猜你喜欢
  • 1970-01-01
  • 2016-08-30
  • 2014-12-06
  • 2016-10-30
  • 1970-01-01
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多