2013-03-05 98 views
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',),第二個沒有?

第一個列表是元組列表嗎?

回答

3

[(u'koko',), (u'lolo',)]是unicode字符串的1元組元組列表。

["koko","lolo"]是字節串的列表。

+0

我該如何製作第二個列表unicode列表? – cikatomo 2013-03-05 15:40:09

+1

@cikatomo你可以使用'u'some string'作爲字面值,或者使用內置的'unicode()'來使一個字符串成爲unicode字面值。或者,使用默認情況下所有字符串都是Unicode的Python 3.x。值得注意的是,一般來說,unicode字符串和字節字符串可以在其他任何地方工作(除少數情況下,或者當然,您需要unicode字符的地方)。 – 2013-03-05 15:40:43

+0

如果你想做同樣的事情,爲什麼你不復制它?這正是它的樣子。 – 2013-03-05 15:41:54

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' 

注意str(tup)隱含元組中的每個元素調用repr

2

你可能想操縱的結果,以使其適應你想要的格式...

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

...也許到應用功能ELEM [0](取決於你的Python版本)把字符串放在你想要的格式中。