1

Pythonスクリプトでsqliteデータベースに簡単なクエリを書き込もうとしています。パラメータが正しいかどうかをテストするために、ipython コマンド ラインからクエリを実行してみました。それは次のように見えました:

import sqlite3
db = 'G:\path\to\db\file.sqlite'
conn = sqlite3.connect(db)
results = conn.execute('SELECT * FROM studies').fetchall()

何らかの理由で、私の結果は完全に空になりました。次に、別のテスト クエリを試しました。

results = conn.execute('SELECT id FROM studies').fetchall()

正しく返されました。アスタリスクに問題があると考えた [間違い、以下の 2 番目の更新を参照] ので、デフォルトの Python コマンド ラインから 'SELECT * FROM Studies' クエリを試しました。見よ、それは正しく戻った。アスタリスクをエスケープする通常の方法をすべて試しましたが、さまざまなエラー メッセージが表示されました。このクエリを IPython で実行する方法はありますか?


編集: 申し訳ありませんが、IronPython と IPython が同じであると誤って想定していました。私が意味したのは、IPython コマンド ラインであり、IronPython フレームワークではありません。


EDIT2: さて、この成功したクエリで示されているように、アスタリスクが機能することがわかりました:

'SELECT COUNT(*) FROM studies'

ここに投稿された提案から、複数のフィールドを持つレコードを返そうとするとエラーが発生することがわかります。

'SELECT field1,field2 FROM studies'

それでもレコードが返されます。それに応じて質問のタイトルを変更しました。

4

5 に答える 5

1

あなたが試すことができるいくつかのデバッグ:

s = 'SELEECT * from studies'
print s
conn.execute(s).fetchall()

また:

s = 'SELECT ' + chr(42) + ' from studies'
conn.execute(s).fetchall()

あなたも試してみてください:

conn.execute('select count(*) from studies').fetchall()

それが [(0,)] として返される場合、本当に奇妙なことが起こっています :-)


あなたが試すことができるいくつかのこと:

conn.execute('select id from (select * from studies)').fetchall()

また:

cur = conn.cursor()
cur.execute('select * from studies').fetchall()
于 2009-07-15T23:05:46.213 に答える
1

これが SQL です。IronPython は、クエリの処理とはほとんど、またはまったく関係がありません。特殊な文字エンコーディングを使用していませんか? (IE は UTF-8 または ASCII ではありません)?

次の場合はどうなりますかSELECT id,fieldname,fieldname FROM studies(つまり、'*' の動作をシミュレートします)。

于 2009-07-15T20:06:32.407 に答える
1

IPython と sqlite で言及したすべてのことを問題なく試しました (ipython 0.9.1、python 2.5.2)。

これは何らかのバージョンの不一致の問題である可能性はありますか? シェルが別のライブラリを参照している可能性がありますか?

たとえば、

import sqlite3; print sqlite3.version

両方のシェル (つまり、ipython と SQL クエリが機能する通常のシェル) から同じものを返しますか?

どうですか

conn.execute('select sqlite_version()').fetchall()

それは同じものを返しますか?

于 2009-07-16T06:08:35.723 に答える
0

勝手な推測ですが、データベース ファイルへのパスのバックスラッシュをエスケープしてみてください。言い換えれば、代わりに

db = 'G:\path\to\db\file.sqlite'

試す

db = 'G:\\path\\to\\db\\file.sqlite'
于 2009-07-15T22:28:29.580 に答える