【问题标题】:ValueError: invalid literal for int() with base 10: 'NewFilmLikes' in PythonValueError:int() 的无效文字,基数为 10:Python 中的“NewFilmLikes”
【发布时间】:2018-03-27 07:41:31
【问题描述】:

我试图从 SQLite3 数据库中获取一个值并将其放入名为 FilmLikes 的变量中,然后我想向其中添加一个并将其存储在变量 NewFilmLikes 中。然后我尝试将数据库中此框的值更改为“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()

这是 i 的代码:

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()

【问题讨论】:

  • 显示i的代码。
  • 我已将其添加到主帖@CL
  • 两个代码摘录不一致。为什么要显示注释掉的代码?确保缩进正确且一致。

标签: python sqlite valueerror


【解决方案1】:

如果不了解您的设置,很难正确回答这个问题。
请注意,您提到的特定错误 (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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 2021-08-06
    • 2018-09-05
    相关资源
    最近更新 更多