索引超出范围/条件问题

Index out of range/ conditional issues

提问人:fafottos 提问时间:4/6/2023 更新时间:4/7/2023 访问量:48

问:

因此,我正在尝试运行一个条件,该条件根据 SQL 查询返回的行数确定是向同一数据库添加行还是更新现有行。如果我的owned_stocks表中的行数为 0,则表示用户不拥有该公司的股票,我添加一行,如果数字为 1,则表示用户已经拥有股票,我只是编辑该现有行:

count = db.execute("SELECT COUNT (symbol) FROM owned_stocks WHERE user_id=? AND symbol=?", session["user_id"], symbol["symbol"])

        if count == 0:
            db.execute("INSERT INTO owned_stocks (symbol, current_price, stock_number, user_id) VALUES(?, ?, ?, ?)", symbol["symbol"], symbol["price"], buy_amount, session["user_id"])#!!
        else:
            user_amount_raw = db.execute("SELECT stock_number FROM owned_stocks WHERE symbol=? AND user_id=?", symbol["symbol"], session["user_id"])
            user_amount = int(user_amount_raw[0]["stock_number"])
            db.execute("UPDATE owned_stocks SET stock_number = ? WHERE id = ? AND symbol = ?", user_amount + buy_amount, session["user_id"], symbol)

但是当我在我的程序上尝试使用用户没有拥有的股票的符号时,会出现以下错误:

    user_amount = int(user_amount_raw[0]["stock_number"])
    IndexError: list index out of range

我的程序不应该执行第一个 if 子句吗?我尝试在单独的终端上单独运行 SQL 查询,以确认它返回的计数为 0,并且确实如此。我错过了什么?

python mysql if-statement 索引 outofrangeexception

评论

0赞 JonSG 4/6/2023
如果这不是一个玩具的例子,你肯定会想使用交易。
1赞 Jiho Choi 4/6/2023
你在用什么?此外,您可能希望首先检查 by 的类型以及它是否是 List-Like Object。dbuser_amount_rawprint(type(user_amount_raw))
0赞 Michael Butscher 4/6/2023
根据 dev.mysql.com/doc/connector-python/en/... 和 Python DB API 标准,不会返回查询中要求的一个或多个值。这是方法的工作。executeCursor.fetch...

答:

0赞 Rick James 4/7/2023 #1

您大概可以切换到 Upsert (INSERT ...重复更新......并简化代码,加快代码速度,避免问题。