2017-02-26 2 views
0

したがって、Python 3.5のSQlite3クエリから複数の値を1行のデータとして取得しようとしています。私はこれを問題のないデータのセットの1つとして発生させることができます。私は結果として保存されている返されたリストから別の値を試してみて、引っ張って行くとき、私は次のエラーを取得を開始:Python用SQLiteのクエリから複数の値を取得できません

Traceback (most recent call last): 
    File "E:\speedrack.py", line 183, in btn_clk 
    c.execute("SELECT * FROM beamupright WHERE catalogNo=?", [entry]) 
sqlite3.OperationalError: no such table: beamupright 

次のコードでは、セルにディスクに値を配置するため、問題なく動作します#Descriptionで指定されています。

def btn_clk(self): 
    sender = self.sender() 
    if sender.text() == "Submit": 
     entry = self.mod_num.text() 
     conn = sqlite3.connect("uprightsbeams.db") 
     c = conn.cursor() 
     c.execute("SELECT * FROM beamupright WHERE catalogNo=?", [entry]) 
     results = c.fetchone() 
     disc = results[2] 
##   unit = results[5] 
##   wgt = results[3] 
##   l_price = results[4] 
     print(results) 
     print(disc) 
##   print(unit) 
##   print(wgt) 
##   print(l_price) 
    #Catalot No. 
     col = 0 
     tab_entry = QTableWidgetItem(self.mod_num.text()) 
     self.form_widget.setCurrentCell(self.row, col) 
     self.form_widget.setItem(self.row, col, tab_entry) 
    #Discription 
     col = 1 
     tab_disc = QTableWidgetItem(disc) 
     self.form_widget.setCurrentCell(self.row, col) 
     self.form_widget.setItem(self.row, col, tab_disc) 

私が行くと、次の操作を行います。私はエラーを取得するとき

def btn_clk(self): 
    sender = self.sender() 
    if sender.text() == "Submit": 
     entry = self.mod_num.text() 
     conn = sqlite3.connect("uprightsbeams.db") 
     c = conn.cursor() 
     c.execute("SELECT * FROM beamupright WHERE catalogNo=?", [entry]) 
     results = c.fetchone() 
     disc = results[2] 
     unit = results[5] 
##   wgt = results[3] 
##   l_price = results[4] 
     print(results) 
     print(disc) 
     print(unit) 
##   print(wgt) 
##   print(l_price) 
    #Catalot No. 
     col = 0 
     tab_entry = QTableWidgetItem(self.mod_num.text()) 
     self.form_widget.setCurrentCell(self.row, col) 
     self.form_widget.setItem(self.row, col, tab_entry) 
    #Discription 
     col = 1 
     tab_disc = QTableWidgetItem(disc) 
     self.form_widget.setCurrentCell(self.row, col) 
     self.form_widget.setItem(self.row, col, tab_disc) 
    #Color 
     col = 2 
     color = QTableWidgetItem(self.color_Entry.currentText()) 
     self.form_widget.setCurrentCell(self.row, col) 
     self.form_widget.setItem(self.row, col, color) 
    #QTY 
     col = 3 
     qty = QTableWidgetItem(self.qty_Entry.text()) 
     self.form_widget.setCurrentCell(self.row, col) 
     self.form_widget.setItem(self.row, col, qty) 
    #place holder for UN. cell 
     col = 4 
     un_tab = QTableWidgetItem(unit) 
     self.form_widget.setCurrnetCell(self.row, col) 
     self.form_widget.setItem(self.row, col, un_tab) 

は次のとおりです。私はこれを引き起こしている間違った

Traceback (most recent call last): 
     File "E:\speedrack.py", line 183, in btn_clk 
     c.execute("SELECT * FROM beamupright WHERE catalogNo=?", [entry]) 
    sqlite3.OperationalError: no such table: beamupright 

何をしているのですか?

+0

"このようなテーブルはありません:ビームアップライト"このエラーは、エラーメッセージと同じくらい簡単です。 – DeepSpace

+0

@DeepSpace私もそう思った。しかし、別の情報を手に入れようとする前に、同じテーブルからどのように最初のデータを得ることができるのかを説明できますか? –

+0

作業コードはどこですか?作業コードがどこにありませんか?不要なGUIを使わずに[mcve]を提供してください。 – DeepSpace

答えて

0

エラーメッセージは、開いたデータベースが空であることを示しています。

ランダムなディレクトリにデータベースを開いているので、実際には空のデータベースが作成される可能性があります。

データベースファイルの絶対パスを必ず使用してください。

+0

これで解決しました。私はdbが同じディレクトリにあるとは思っていませんでしたが、一般的にはdbとpythonにアクセスすることについてまだ多くのことを学んでいると思います。ありがとうございました。 –

-1

それはうまくいって失敗しました。

理由:接続を閉じてカーソルをフラッシュすることはありません。その結果、表がロックされ、アクセスできなくなります。

Changeからのコードのこのセクション:

c = conn.cursor() 
c.execute("SELECT * FROM beamupright WHERE catalogNo=?", [entry]) 
results = c.fetchone() 

へ:クエリの実行が終了したときに

with conn: 
    c = conn.cursor() 
    c.execute("SELECT * FROM beamupright WHERE catalogNo=?", [entry]) 
    results = c.fetchone() 

これは自動的に接続を解放します。

+0

アラン、お返事ありがとうございます。残念ながら、これは私が持っていた問題を解決しませんでした。私はまだ同じトレースバックを取得しています。私は本当に何が起こっているのか分からない。私は、結果を入れることによってリストが格納され、def btn_clkメソッドを呼び出すそのインスタンスに使用できると考えました。しかし、それは動作していません。 –

関連する問題