1

我有一个装满东西的 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&python 中做过与此类似的查询(当然,不是那么复杂),它们已经奏效了。我尝试了各种其他方法,但似乎都没有奏效......我错过了一些非常简单的东西吗?

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

4

2 回答 2

2

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

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

.

于 2013-02-28T22:27:00.283 回答
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 列的列表。

于 2013-02-28T22:31:01.567 回答