Python CS50-财务(/购买)

Python CS50-财务(/购买),python,sqlite,Python,Sqlite,我有一个关于我需要解决的问题集的问题(使用HTML和Flask的网页)。我在没有语法错误的情况下成功地实现了我的代码,但是我已经被困在这个错误中很长时间了……每当我尝试在所选页面上使用“POST”方法时,都会导致错误500 db.execute("INSERT INTO history(Symbol, Amount, Price, Action, user_id, datetime) VALUES(:symbol, :amount, :price, :action, :uid ,:da

我有一个关于我需要解决的问题集的问题(使用HTML和Flask的网页)。我在没有语法错误的情况下成功地实现了我的代码,但是我已经被困在这个错误中很长时间了……每当我尝试在所选页面上使用“POST”方法时,都会导致错误500

db.execute("INSERT INTO history(Symbol, Amount, Price, Action, user_id, datetime) VALUES(:symbol, :amount, :price, :action, :uid ,:date)",
        symbol = request.form.get("symbol"),
        amount = number_of_shares,
        price= buy["price"],
        action="BOUGHT",
        uid=session["user_id"],
        date=datetime.datetime.now())
这是我想在名为history的表中插入SQLITE3

以下是有关历史记录表的信息:

        Column #    Field       Type      Not NULL    Default Value   Primary Key
          0     Transaction ID  integer   Yes           None           Yes
          1         Symbol      text      No            None           No
          2         Amount      integer   No            None           No
          3         Price       numeric   No            None           No
          4         Action      text      No            None           No
          5         user_id     INTEGER   No            None           No
          6         datetime    datetime  No            None           No
我无法理解为什么不能将这些数据插入SQL表中,我在该表中不断收到的错误消息是:

DEBUG:cs50:INSERT INTO history(Symbol, Amount, Price, Action, user_id, datetime) VALUES('AAPL', 3, 125.065, 'BOUGHT', 3 '2020-10-13 13:30:39')

如果有人知道它可能是什么,它是什么类型的。。。?非常感谢

第一行缺少逗号

应该是:

db.execute("INSERT INTO history(Symbol, Amount, Price, Action, user_id, datetime) VALUES(:symbol, :amount, :price, :action, :uid, :date)"

看看它现在能不能用

不确定这是否会有帮助,但这是我去年做CS50时的
buy
功能代码:

def buy():
    
    if request.method == "POST":
        data = lookup(request.form.get("symbol"))
        shares = request.form.get("shares")
        
        #Check if symbol exists
        if data == None:
            return apology("invalid symbol", 400)
            
        #Check if shares entered is an integer
        try:
            shares = int(shares)
        except:
            return apology("shares must be a positive integer")
        
        #Check if shares entered > 0
        if shares <= 0:
            return apology("shares must be greater than 0", 400)
            
        #Check how much cash user has
        user = db.execute("SELECT cash FROM users WHERE id = :user_id", user_id=session["user_id"])
        current_cash = user[0]["cash"]
        
        #Calculate amount required to buy shares
        price = data["price"] * shares
        
        #Check if user has enough money
        if price > current_cash:
            return apology("not enough money", 400)
        
        #Subtract price from user's cash
        current_cash = current_cash - price
        
        #Insert new cash into users database
        db.execute("UPDATE users SET cash = :current_cash WHERE id = :user_id", user_id=session["user_id"], current_cash=current_cash)
        
        #Insert transaction into transactions database
        db.execute("INSERT INTO transactions (user_id, symbol, name, shares, price) VALUES(:user_id, :symbol, :name, :shares, :price)", 
                   user_id=session["user_id"], 
                   symbol=request.form.get("symbol"),
                   name=lookup(request.form.get("symbol"))['name'],
                   shares=shares,
                   price=data["price"])
        
        flash("Bought!")
        
        return redirect("/")
    
    else:
        return render_template("buy.html")
def buy():
如果request.method==“POST”:
数据=查找(request.form.get(“符号”))
共享=request.form.get(“共享”)
#检查符号是否存在
如果数据==无:
返回道歉(“无效符号”,400)
#检查输入的共享是否为整数
尝试:
股票=整数(股票)
除:
返回道歉(“股份必须是正整数”)
#检查输入的共享是否大于0
如果股票以现金流通:
回复道歉(“钱不够”,400)
#从用户的现金中减去价格
当前现金=当前现金-价格
#将新现金插入用户数据库
db.execute(“更新用户设置现金=:当前现金,其中id=:用户id”,用户id=会话[“用户id”],当前现金=当前现金”)
#将事务插入事务数据库
db.execute(“在事务中插入(用户id、符号、名称、共享、价格)值(:用户id、:符号、:名称、:共享、:价格)”,
用户标识=会话[“用户标识”],
symbol=request.form.get(“symbol”),
name=lookup(request.form.get(“symbol”)['name'],
股份=股份,
价格=数据[“价格”])
闪光(“买了!”)
返回重定向(“/”)
其他:
返回渲染模板(“buy.html”)

EDIT:我刚刚看到我忘记了占位符:uid和:date之间的逗号,但这不是错误。如果其中一个列名被解释为关键字,您是否尝试过将列名用反勾号包装?类似于
插入历史(`Symbol`、`Amount`、`Price`、`Action`、`user\u id`、`datetime`)值('AAPL',3125.065,'bunded',3'2020-10-13 13 13:30:39')
是的,这也没有起作用。。谢谢你!不起作用,我看到我忘记了两个占位符之间的逗号,但错误500消息仍然出现并指向该行。。。谢谢你!这不是最好的代码,我们的变量和数据库名称也有差异——但也许只是试着看看我的代码,也许试着找出一个错误?希望这有帮助!