Python& Sqlite:由于语法错误,无法执行查询

时间:2013-02-28 22:25:36

标签: python sql sqlite

我有一个充满东西的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()

这将返回错误:

File "data.py", line 12, in <module>
    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)
sqlite3.OperationalError: near "blast": syntax error

我不知道python指的是什么语法错误 - 我在sqlite&amp; python之前做过类似的查询(授予,并不那么复杂),并且它们已经有效了。我尝试了其他各种方法,但似乎都没有用......我错过了一些非常简单的东西吗?

另外,另一个问题 - 一旦我开始工作,从结果中单独提取列的最佳方法是什么?我之前使用过cur.fetchone()并将其分配给单个变量,只返回一件事,但不确定它是否适用于返回多个事物的查询。

2 个答案:

答案 0 :(得分:2)

您需要用逗号分隔FROM - 部分中的表格:

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

答案 1 :(得分:1)

要提取列,您可以将lambda函数映射到列表列表,例如第一列的map(lamda x:x [0],listoflist),map(lambda x:x [1],listoflists)第二等。

你甚至可以创建一个执行此操作的lambda函数,即

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

并使用

extractor(i,listofLists)

获取第i列的列表。