2017-10-15 80 views
0

我想從SQLite3數據庫獲取值並將其放入名爲FilmLikes的變量中,然後我想向其中添加一個值將其存儲在變量NewFilmLikes中。然後我試着在我的數據庫更改此框中的值到「NewFilmLikes」,但我總是得到這樣的問題:ValueError:對於基數爲10的int()無效字面值:Python中的'NewFilmLikes'

ValueError異常:無效的字面INT()基數爲10:「NewFilmLikes」

這裏是代碼表明:

FilmLikes=i[2] 
NewFilmLikes=(int(FilmLikes))+1 
filmUpdate=("UPDATE HORRORALL SET likes = ? WHERE number = 1"(NewFilmLikes)) 
c.execute(filmUpdate) 
conn.commit() 

這裏是我的代碼:

for i in find_film: 
          print('') 
          print('Number',(i[0])) 
          print(i[1]) 
         filmChoice=int(input('Please choose which number you would like to like: ')) 
         if filmChoice==1: 
          find_film=c.execute("SELECT * FROM HORRORALL") 
          for i in find_film: 
           if i[0]==filmChoice: 
##         FilmLikes=i[2] 
            try: 
             x=(int(i[2]))+1 
            except: 
             pass 
##          FilmLikes=i[2] 
##         NewFilmLikes=(int(str(FilmLikes)))+1 
            filmUpdate=("UPDATE HORRORALL SET likes = ? WHERE number = 1"(x)) 
            c.execute(filmUpdate) 
            conn.commit() 
+0

顯示'i'的代碼。 –

+0

我已將它添加到主帖@CL –

+0

這兩個代碼摘錄彼此不一致。你爲什麼要顯示註釋掉的代碼?確保縮進是正確和一致的。 –

回答

-1

你得到的值錯誤,因爲變量,你正試圖轉換到整數不能轉換。這是因爲變量是'你好',所以不是一個整數。解決這個問題的方法是嘗試將其轉換爲如此類似的內容。 try: i=(int(x))+1 except: pass

+0

我現在只是得到這個錯誤:UnboundLocalError:本地變量'x'在賦值之前引用的代碼:try: x =(int(i [2]))+ 1 除外: pass –

0

不知道更多關於您的設置,很難正確回答這個問題。
請注意,您提到的具體錯誤(ValueError: invalid literal for int() with base 10: 'NewFilmLikes')通常發生在獲取小數而不是整數時。

這是一種普遍的答案。

  1. 最好不要使用SELECT *,因爲它隱藏了您試圖檢索的內容。通過這種方式指定,例如SELECT film_id, file_name, no_of_likes FROM horrorall,您可以看到您正在檢索的內容和位置。
  2. 您正在檢索整個電影列表find_film,然後循環查找哪一個。 SQL有一個查找功能,它被稱爲WHERE,您正在使用它在film_update部分。如果您有用戶輸入的ID或姓名,則可以只撥打您需要的記錄。例如。 "SELECT film_id, file_name, no_of_likes FROM horrorall WHERE film_id = ?" (filmChoice,)
  3. 需要注意的是參數化查詢使用一個元組,即使只有一個參數 - 因此,它是(filmChoice)用逗號(和filmUpdate你需要(x,)
  4. filmUpdate將只更新了第一部電影。我認爲,因爲你的if ...循環繼續通過所有可能的選擇?你可以通過在其中放置另一個?來爲你的WHERE例如filmUpdate=("UPDATE HORRORALL SET likes = ? WHERE number = ?"(x,i[0]))
  5. 用戶如何知道要選擇什麼電影?直到他們給你一個號碼,你纔會檢索這個列表!

把所有這些放在一起,這裏是一個例子。請注意,這並不是理想的做法,我不想一次性向您拋出太多的想法!

# Get the whole list of films to show to the user 
find_film = c.execute("SELECT film_id, film_name FROM HORRORALL") 
# Present the list for selection 
for films in find_film: 
    print(str(films[0]) + '. ' + films[1]) 
# Get the users input as an integer 
filmChoice = int(input('Please choose which number you would like to like: ')) 
# Fetch the number of likes of the selected film 
film_likes = c.execute('SELECT likes FROM HORRORALL WHERE film_id = ?' (filmChoice,)) 
# Send the update back to the database 
c.execute("UPDATE HORRORALL SET likes = ? WHERE film_id = ?"(int(film_likes[0]) + 1, filmChoice) 
conn.commit() 
相關問題