我如何fetchone()或fetchall()sqlite3并使用python将它们作为str存储在var中

时间:2017-06-15 12:59:38

标签: python-3.x

尝试从sqlite3获取值并将其转换为字符串并将其存储在变量中

import sqlite3

conn = sqlite3.connect('mydb.db')
database = conn.cursor()

u = 'ZERO'
all_data = str(database.execute("SELECT * FROM logs where loguser =? ", (u,)).fetchone())

结果:

  

(5,' ZERO',你好!')

我试过了:

x = ''.join(all_data)

print(x)

我希望:

  

5 ZERO你好!

1 个答案:

答案 0 :(得分:1)

运行fetchone()时,会得到一个元组,它表示数据库表中的行,因此列的值是元组中的元素:

(5, 'ZERO', 'hello there !')

然后您使用str()转换为字符串:

>>> all_data = str((5, 'ZERO', 'hello there !'))
>>> all_data
"(5, 'ZERO', 'hello there !')"

在将值存储到all_data之前,您已将其转换为字符串,这就是您''.join()无效的原因:

>>> ''.join('abcdefg')
'abcdefg'

您显然不想要逗号和括号,因此我们不应该首先将fetchone()的结果转换为字符串。让我们先得到元组:

>>> data = database.execute(...).fetchone()
>>> data
(5, 'ZERO', 'hello there !')

现在将元组的元素连接在一起,用空格分隔(正如您所问):

' '.join(data)

如果元组中有非字符串元素(在您的情况下为5),则无效。因此您需要在加入之前将所有内容转换为字符串。我推荐使用理解:

' '.join(str(column) for column in data)

这将为您提供所需的最终字符串:

>>> data_str = ' '.join(str(x) for x in data)
>>> data_str
'5 ZERO hello there !'