当我尝试减法时,我得到了一个错误的响应

2024-10-03 23:24:02 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一段代码。当我想从SQLite中删除可用数据时,我会得到一个错误的响应。假设初始数据为0,我减去100,然后,当我尝试减去更多时,它减去,然后写一个错误

cursor.execute("SELECT usd FROM balans")
FOR_USD = int(str(cursor.fetchone()).replace(',', '').replace('(', '').replace(')', ''))

def checkcmbo():
    FOR_USD = int(FOR_USD) - int(num.get())
    FOR_USD = f"""Update balans set usd = {FOR_USD}"""
    cursor.execute(FOR_USD)
    connect.commit()

运行之后,我在控制台中得到这个错误

File "C:\pyt\lib\tkinter\__init__.py", line 1883, in __call__
        return self.func(*args)
File "C:/Users/d6692/PycharmProjects/ahmed/ahmed.py", line 91, in checkcmbo
        FOR_USD = int(FOR_USD) - int(num.get())
ValueError: invalid literal for int() with base 10: 'Update balans set usd = -850'

Tags: 数据forexecuteget错误updatecursornum
1条回答
网友
1楼 · 发布于 2024-10-03 23:24:02

当前,在执行chekcmbo一次之后,FOR_USD的值是您的SQL语句Update balans set usd = -850。因此,当您再次运行它时,您尝试将SQL语句强制转换为整数,这会导致错误。只需替换SQL字符串的变量名即可解决此问题,例如:

FOR_USD = cursor.fetchone()[0] #This is a much better way to get the value than .replace()

def checkcmbo():
    FOR_USD = int(FOR_USD) - int(num.get())
    FOR_USD_SQL = "UPDATE balans SET usd = ?"
    cursor.execute(FOR_USD_SQL, (FOR_USD,))

这样FOR_USD整数就不会被SQL语句覆盖。
编辑
感谢Cool Cloud指出原始答案很容易被注入

相关问题 更多 >