Django QuerySet values_list 返回未知字符

Posted

技术标签:

【中文标题】Django QuerySet values_list 返回未知字符【英文标题】:Django QuerySet values_list returning unknown characters 【发布时间】:2012-01-25 15:56:52 【问题描述】:

我正在使用 django 从我拥有的 mysql 服务器中提取一些数据。目前,我让它从 SQL 服务器中提取一整列数据(“轻”列)。

为此,我使用以下代码

weather = weatherdata.objects.values_list('light', flat=True)

lightdata = list(weather)

当我这样做时,lightdata 列表如下所示:

[35L, 53L, 77L, 99L, 49L, 46L, 28L, 13L, 2L, 0L, 0L, 0L]  

这些值是正确的,只是每个值的末尾都有一个 L。如何从该列表中删除 L?

【问题讨论】:

【参考方案1】:

你可以这样做:

l = [35L, 53L, 77L, 99L, 49L, 46L, 28L, 13L, 2L, 0L, 0L, 0L]
l = [int(item) for item in l]

如果你想删除复制的项目:

l = [35L, 53L, 77L, 99L, 49L, 46L, 28L, 13L, 2L, 0L, 0L, 0L]
l = list(set(l))
l = [int(item) for item in l]

【讨论】:

只是一个评论。要删除重复的项目,最好在查询中附加一个 distinct()。【参考方案2】:

末尾的 L 表示它是长类型。它不会通过 print 语句打印,它只是告诉你这里存储的数字绝对不是整数。

如果您真的想摆脱它们,那么我想您可以执行以下操作:

lightdataNew = []
for num in lightdata:
    lightdataNew.append(int(num))
lightdata = lightdataNew[:] 

【讨论】:

【参考方案3】:

L表示长整数。

>>> a = long(5)
>>> a
5L
>>> print a
5

您可以根据需要转换列表中元素的类型,但可能没有必要。

>>> b = [int(i) for i in list_of_longs]
>>> c = [str(i) for i in list_of_longs]

编辑:似乎 Goin、Makoto 和我都在同时输入答案。

【讨论】:

以上是关于Django QuerySet values_list 返回未知字符的主要内容,如果未能解决你的问题,请参考以下文章

DJango filter_queryset

Django - 如何将 QuerySet 转换为 Q 对象?

django的queryset和objects对象

Django--QuerySet

QuerySet,对象没有属性 id - Django

如何在 Django 中覆盖“get_queryset()”