我有一个充满东西的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()并将其分配给单个变量,只返回一件事,但不确定它是否适用于返回多个事物的查询。
答案 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列的列表。