1

这不是特定于 sqlite 的,但我在学习 python 和 sqlite3 并列出查询结果时想知道。我有简单的代码:

connection = sqlite3.connect("db.sqlite")
cursor = connection.cursor()
cursor.execute("select * from db")
print cursor.fetchall()

因此,结果print cursor.fetchall()是:[(u'koko',), (u'lolo',)] 但是,当我尝试使用此代码重新创建那种打印时:

i=["koko","lolo"]
print i

打印结果是:['koko', 'lolo']

我不明白的两件事:

  1. 为什么第一个列表在打印时有 'u' 表示 unicode 而第二个没有?
  2. 为什么第一个列表(u'koko',)在打印时有括号而第二个没有?

第一个列表可能是元组列表吗?

4

3 回答 3

3

该列表有括号,因为这就是 python 打印tuple.

对比:

a = 'foo'
print a,type(a)

和:

b = ('foo',)
print b,type(b)

另请注意,在 python2.x 中,有不同类型的字符串。 unicode只是一种字符串,python 选择将其表示为u'whatever'

>>> print u'whatever'
whatever
>>> print repr(u'whatever')
u'whatever'

Note that str(tup) implicitly calls repr on each element in the tuple.

于 2013-03-05T15:39:03.473 回答
3

[(u'koko',), (u'lolo',)] is a list of 1-element tuples of unicode strings.

["koko","lolo"] is a list of byte strings.

于 2013-03-05T15:39:05.917 回答
2

You may want to manipulate the results to adapt it to the format you want...

rows = cursor.fetchall()
result = [elem[0] for elem in rows]

...and maybe to apply a function to elem[0] (depending on your python version) to put the strings in the format you want to.

于 2013-03-05T15:43:33.803 回答