[問題] PyQt和SQLite下,執行select的問題

看板Python作者 (vanchy)時間9年前 (2016/05/12 11:47), 編輯推噓0(0013)
留言13則, 3人參與, 最新討論串1/1
各位版友好,小弟目前在寫一個小project,目的是要做portable的windows app 但目前遇到從資料庫裡無法select的問題,已經卡了1星期了... 以下是我的程式碼,想法是: 比對輸入的字串是否為空→輸入字串是否在資料庫裏面→如果是,將該筆資料select 但是執行之後,Error顯示「No query Unable to fetch row」 我很確定第一個select執行完後,result裡有select出來的資料 def srh(self): query_object = QtSql.QSqlQuery() prod_ID = self.srh_bar.text() result = [] if prod_ID != "": query_object.exec_("SELECT ID FROM add_prod") while (query_object.next()): result.append(query_object.value(0)) print(result) if prod_ID in result: query_object.exec_( "SELECT prod_name, ingre, unit_price, effect" "FROM add_ingre AS I, add_prod AS P, mix AS M" "WHERE I.ID = M.ingre_ID AND P.ID = M.prod_ID" "AND P.ID = '%s'"%prod_ID) if not query_object.exec_(): print(query_object.lastError().text()) else: print("false") 而我也試過用place holder的方式,變成: query_object.prepare( "SELECT prod_name, ingre, unit_price, effect" "FROM add_ingre AS I, add_prod AS P, mix AS M" "WHERE I.ID = M.ingre_ID AND P.ID = M.prod_ID AND P.ID = :a") query_object.bindValue(":a", prod_ID) query_object.exec_() 但是這段程式碼出現「Parameter count mismatch」 希望各位版友能夠幫我解答,謝謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.117.70.25 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1463024872.A.AE3.html

05/12 13:27, , 1F
其實 Python 內建的 sqlite3 module 比 QtSql 好用很多
05/12 13:27, 1F

05/12 13:27, , 2F
不過我猜問題在你的字串接合的地方沒有空白
05/12 13:27, 2F

05/12 13:28, , 3F
"foo" "bar" => "foobar" 要寫成 "foo " "bar" 才對
05/12 13:28, 3F

05/12 14:11, , 4F
不好意思,請問是指哪一段需要字串接合呢?
05/12 14:11, 4F

05/12 15:27, , 5F
prepare 裡面那段, 你每一行的字串最後面都要多一個空白
05/12 15:27, 5F

05/12 15:27, , 6F
"SELECT prod_name, ingre, unit_price, effect "
05/12 15:27, 6F

05/12 15:28, , 7F
"FROM add_ingre AS I, add_prod AS P, mix AS M "
05/12 15:28, 7F

05/12 15:28, , 8F
"WHERE I.ID = M.ingre_ID AND ... (後面太長了)"
05/12 15:28, 8F

05/12 20:30, , 9F
建議你寫成 s = 'select prod_name, ingre...(省略)'
05/12 20:30, 9F

05/12 20:30, , 10F
query_object.prepare(s)
05/12 20:30, 10F

05/12 20:31, , 11F
這樣寫,偵錯的時候直接 print(s) 會比較容易發現
05/12 20:31, 11F

05/12 20:32, , 12F
還有你的字串如果是中文,可能需要用""括起來,不是很確定
05/12 20:32, 12F

05/12 22:10, , 13F
感謝兩位大大的幫忙,我終於解決了QAQ
05/12 22:10, 13F
文章代碼(AID): #1NC_pehZ (Python)
文章代碼(AID): #1NC_pehZ (Python)