2013-02-28 109 views
1

我有一個充滿東西的sqlite數據庫,而且我正在編寫代碼來搜索並提取我想要的數據。這裏就是我撞上了麻煩:Python&Sqlite:由於語法錯誤而無法執行查詢

conn = sqlite3.connect("ensembl.db") 
cur = conn.cursor() 
... 
cur.execute('SELECT b.chr,(b.start-e.start) as StartD, (b.end-e.end) as EndD,b.tcon,b.tname,b.gname FROM ensembl e blast b WHERE b.tcon=? AND b.tname=e.tname AND b.gname=e.gname AND b.chr=e.chr',tcon) 
     print cur.fetchone() 

這將返回錯誤:

我不知道這個語法錯誤是什麼,Python是指 - 我已經做了類似的查詢(授予,並不十分複雜),以前在sqlite & python,他們已經工作。我嘗試過其他各種方法,但似乎沒有任何工作......我錯過了一些非常簡單的事情嗎?

另外,另一個問題 - 一旦我得到這個工作,單獨從結果中提取列的最佳方法是什麼?我之前使用過cur.fetchone(),並將它分配給一個變量,只返回一個查詢,但不知道它是否適用於返回多個事物的查詢。

+0

您可能會考慮刪除python標籤。你有一個SQL語法問題。 – 2013-02-28 22:28:14

+0

請爲您的第二個問題另外提問。 – 2013-02-28 22:29:06

回答

2

你需要用英文逗號分隔的FROM -section表:

[..] FROM ensembl e, blast b [..] 

+0

Derp。不知怎的,我錯過了。感謝您指出。 – Joe 2013-02-28 22:33:07

1

要提取colum,可以將lambda函數映射到第一列,map(lambda x:x [1],listoflists)列表,即map(lamda x:x [0],listoflist)第二等

你甚至可以創建一個lambda函數,這樣做,即

extractor = lambda i,l : map(lambda x: x[i],l) 

,並使用

extractor(i,listofLists) 

獲得第i列的列表。