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() を使用して、1 つのものだけを返すクエリの単一の変数に割り当てましたが、複数のものを返すクエリで機能するかどうかはわかりません。

4

2 に答える 2

2

FROM-sectionでテーブルをカンマで区切る必要があります。

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

.

于 2013-02-28T22:27:00.283 に答える
1

列を抽出するには、ラムダ関数をリストのリストにマップできます。つまり、最初の列は map( lamda x: x[0], listoflist) 、2番目の列は map(lambda x: x[1], listoflists) などです。

これを行うラムダ関数を作成することもできます。

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

と使用

extractor(i,listofLists)

i 番目の列のリストを取得します。

于 2013-02-28T22:31:01.567 に答える