I'm stuck on pset8 c$50 finance /buy: Form validation works properly but when i try to execute the INSERT INTO transactions table i get the following error:
RuntimeError: (sqlite3.OperationalError) near "'A'": syntax error
[SQL: INSERT INTO transactions (buyer, symbol, price, shares, total)
VALUES(8 'A' 72.16 1 72.16)]
my "transactions" table query is as follows:
CREATE TABLE 'transactions'
('id' integer PRIMARY KEY AUTOINCREMENT NOT NULL,
'buyer' integer NOT NULL,
'symbol' text NOT NULL,
'price' real NOT NULL,
'shares' INTEGER NOT NULL ,
'total' INTEGER NOT NULL ,
'transacted' datetime NOT NULL DEFAULT 'datetime(''now'')')
i'll add that i tried to implement the 'transacted' field in a various ways(with defaults or without etc..) even though it doesn't seem to be the problem
here's the current code i wrote:
@app.route("/buy", methods=["GET", "POST"])
@login_required
def buy():
"""Buy shares of stock"""
# User reached route via POST (as by submitting a form via POST)
if request.method == "POST":
# Form validation
if not request.form.get("symbol"):
return apology("Missing symbol")
elif not request.form.get("shares"):
return apology("Missing shares")
elif int(request.form.get("shares")) <= 0:
return apology("Invalid Shares")
elif not lookup(request.form.get("symbol")):
return apology("Invalid Symbol")
# Review user's cash
cash = db.execute("SELECT cash FROM users WHERE id= :id", \
id=session["user_id"])
# Ensure user can afford the transaction
stock = lookup(request.form.get("symbol"))
shares = int(request.form.get("shares"))
total = stock["price"] * shares
if cash[0]["cash"] < total:
return apology("Can't Afford")
# Confirm transaction, update user's balance
transaction = db.execute("INSERT INTO transactions (buyer, symbol, price, shares, total) VALUES(:buyer :symbol :price :shares :total)", \
buyer=session["user_id"], symbol=stock["symbol"], price=stock["price"], shares=shares, total=total)
cash = db.execute("UPDATE users SET cash = :cash WHERE id = :id", \
cash=cash - total, id=session["user_id"])
return redirect("/")
# User reached route via GET (as by clicking a link or via redirect)
else:
return render_template("buy.html")
thanks in advance for your help!