Python CS50-财务(/购买)
我有一个关于我需要解决的问题集的问题(使用HTML和Flask的网页)。我在没有语法错误的情况下成功地实现了我的代码,但是我已经被困在这个错误中很长时间了……每当我尝试在所选页面上使用“POST”方法时,都会导致错误500Python 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
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消息仍然出现并指向该行。。。谢谢你!这不是最好的代码,我们的变量和数据库名称也有差异——但也许只是试着看看我的代码,也许试着找出一个错误?希望这有帮助!