2011-12-05 14 views
4

pythonを通してSQLiteデータベースを開き、テーブルのビューのビューにアクセスしようとしました。残念ながらエラーメッセージが表示されます。以下のPythonコードは、問題を示していますTestView2を作成しようとした後Python sqlite3はテーブルのビューの表示を行うことができません

import sqlite3 

conn = sqlite3.connect("test.db") 
mydb = conn.cursor() 

mydb.execute("CREATE TABLE TestTbl (MRTarget_id int, Fullmodel text)") 
mydb.execute("CREATE TABLE TestTbl2 (Other_id int, Othermodel text)") 

mydb.execute("CREATE VIEW TestView AS SELECT m.ROWID, m.MRTarget_id, m.Fullmodel, t.Othermodel FROM TestTbl m, TestTbl2 t") 
mydb.execute("CREATE VIEW TestView2 AS SELECT m.Fullmodel, m.Othermodel FROM TestView m") 

mydb.close() 

Pythonはエラー「m.Fullmodel:いいえ、そのような列sqlite3.OperationalError」を出してくれる。ただし、Sqlite3プロンプトから、上記のSQL文は問題なく実行できます。私のデータベースにはテーブルのビューのビューが含まれているので、これらのプログラムにPythonでアクセスすることはまったく不可能ではないかと思います。

+0

あなたはPython 2.6を使用していますか? –

+0

また、この問題を再現することができません、上記のコードは私のために正常に動作します。 –

+1

Win32で[MSC v.1500 32ビット(Intel)] Python 2.6.6(r266:84297、Aug 24 2010、18:46:32)を再現しました。同じプラットフォーム上でPython 2.7.1でOK。 –

答えて

0

コードは正常に動作します。

あなたは最初のビューを作成し、第二の間にコミットしてみてください可能性:

conn.commit() 
+0

私は、各mydb.executeステートメントの後にconn.commit()を追加しようとしましたが、役に立たなかった。私はまだ同じエラーメッセージが表示されます。私はPython 2.6.5を使用しています。多分それは問題ですか? 実際、私は新しいpythonバージョンを試してみましたが、うまく動いているようですので、私のPythonをよくアップグレードしてください。 ありがとう –

+0

私はそうは思わない - 私は仕事でPython 2.6.nothingを使用しています、それはそこでうまく動作します。 – babbageclunk

1

私は同じ問題を持っていた - と私は解決策を見つけました。私はSQLiteのマネージャ経由ビューでカジュアルな外観がm.を明らかにしません

などだけROWIDFullmodelなどm.Fullmodel、あなたの問題はあなたの最初のビュー「TestViewに」で、属性名が実際にm.ROWIDしていることであると信じての代わりに、各フィールド名の先頭に追加されます。プラグマクエリPRAGMA table_info TestViewを実行すると、属性拡張が表示されます。だから、

CREATE VIEW TestView AS 
SELECT m.ROWID as ROWID, m.MRTarget_id as MRTarget_id,... etc 

にあなたのTestViewに作成クエリを変更し、第二Create Viewクエリが正常に実行されなければならない - 少なくとも、それは私のアプリケーションで行いました。

関連する問題