2015-05-04 29 views
-2

我在JetBrains PyCharm Community Edition 4.0.4中使用Python中的SQLite3。在由句子構成的列中搜索單詞

我有一張表,看起來像這樣。 ID是整數,名稱和內容是文本。

ID Name Content 
1 Matt oirefasd aifsfnib if ib @John sefuhrg wefirwgf 
2 John sdfwre frwgfwg wegfhtr @Patsfrwg 
3 Pat asjgre wurgjnsow wouregjeo @Johnsfbwufaeovnwo 
4 John sfgoe eriogner weogfib 

因此,這裏是我的問題, 假設一個用戶John,已登錄。我怎樣寫SQLite的查詢,這樣我收到包含開始與@符號後跟用戶所記錄的消息的行在(內容)列中的(John)中。

我應該得到的答案是一個元組(ID,名稱,內容)

因此,解決辦法應該是:

ID Name Content 
1 Matt oirefasd aifsfnib if ib @John sefuhrg wefirwgf 
3 Pat asjgre wurgjnsow wouregjeo @Johnsfbwufaeovnwo 

這是我目前的SQL查詢。在這種情況下,currentuser存儲當前登錄用戶的名稱。

str = '%'+ currentuser + '%' 
c = db.cursor() 
sql = "SELECT id, Name, content FROM myusers WHERE myusers.content LIKE ? LiMIT ?" 
c.execute(sql,(str,limit)) 
return [x[0] for x in c] 

我不斷收到這說的錯誤「‘詮釋’對象未標化」

這上面的代碼是越來越對我的單元測試的語句進行測試。這種說法是:

self.assertListEqual([1, 3], [a[0] for a in posts]) 
+0

您是否嘗試過打印出'x'值來查看它們是什麼?這應該解釋爲什麼你會得到這個錯誤。 – abarnert

+0

我忘了提及我是python的新手。我嘗試使用循環來打印所有的值,但Jetbrains IDE不允許我從.py文件打印。 – Timetraveller

+0

你是什麼意思「Jetbrains IDE不允許我從.py文件打印」? PyCharm絕對可以讓你「打印」。它還允許您在集成調試器中設置斷點,寫入文件以及其他一百萬個事物。如果你至少不知道如何做這些事情,你永遠無法調試任何東西,這意味着你永遠無法編寫任何代碼。 – abarnert

回答

0

如果你仔細看,我被要求返回元組。 AND 如果你看單元測試語句assertListEqual([1, 3], [a[0] for a in posts])這意味着你正在比較兩個列表的值。

因此,解決方案在於隨問題提供的代碼。

代替使用此

return [x[0] for x in c] 

返回的每一行的第一個元素的。我使用以下語句:

return [x for x in c] 

這將返回元組。

現在,當assert語句應用於返回兩個元組的a [0]元素的元組時,在這種情況下它是[1,3]。測試通過。

0

你的問題是這樣的一行:

self.assertListEqual([1, 3], [p[0] for p in posts]) 

未在任何你向我們展示了代碼。但據推測,posts是您的問題中的代碼返回的列表。 posts是一個整數列表,如[1, 3],所以每個p是一個整數,所以每個p[0]都會引發異常,因爲您要求1[0],這是沒有意義的。我想你只想assertListEqual([1, 3], posts)

+0

給我一些時間來檢查這個和生病回到你身邊 – Timetraveller