我正在制作 CS50 的最终项目。我们的想法是创建类似 IMDB 的东西,但针对的是精品咖啡。我已经成功创建了一个 SQL 数据库并运行了 Flask 应用程序,并让用户将有关咖啡的信息添加到我的数据库中。
问题如下:我希望有一个评级功能,用户可以对特定的咖啡进行评级。该评级应该发送到我的数据库中的评级表。我尝试建立一个关系数据库,其中 Coffee_id 是 Coffee_Ratings 表中的外键。
现在这就是我仍然做错事的地方。从终端窗口中,我看到所有 SELECT 查询似乎都有效,但不知怎的,我仍然得到“不支持的值 {id:1} - 其中一个是从咖啡表中选择的 Coffee_id....
回溯(最近一次调用最后一次):
response = self.full_dispatch_request()
rv = self.handle_user_exception(e)
db.execute("INSERT INTO coffee_ratings (coffee_id, rating) VALUES (?, ?)", coffee_id, rating)
return f(*args, **kwargs)
我将在此处包含我的Python代码: (我提出了额外的评级香气,身体......我最终也想包括在内,所以我可以先确定评级)
`@app.route("/score", methods=["GET", "POST"])
def score():
if request.method =="POST":`
name = request.form.get("name")
rating = request.form.get("rating")
#aroma = request.form.get("aroma")
# body = request.form.get("body")
coffee_id = db.execute("SELECT id FROM coffees WHERE name LIKE ?", name)
# Check if the coffee exists in the database
if coffee_id is not None:
coffee_id = coffee_id[0] # Extracting the ID from the dictionary
#aroma_id = db.execute("SELECT id FROM aromas WHERE aroma_name = ?", aroma)
# body_id = db.execute("SELECT id FROM bodies WHERE body_name = ?", body)
# db.execute("INSERT INTO coffee_ratings (coffee_id, aroma_id, body_id, rating) VALUES (?, ?, ?, ?)", coffee_id, aroma_id, body_id, rating)
db.execute("INSERT INTO coffee_ratings (coffee_id, rating) VALUES (?, ?)", coffee_id, rating)
return render_template("score.html")
else:
return f"Coffee '{name}' not found in the database."
else:
row = db.execute("SELECT * FROM coffee_ratings;")
return render_template("score.html", score = row)`
这是我的分数.html:
`<form action="/score" method="post">
<input id="name" autocomplete="off" autofocus name="name" placeholder="Name" type="text">
<input id="rating" autocomplete="off" autofocus name="rating" placeholder="rating" type="number" min="1" max="10">
<button type="submit">score</button>
</form>`
这里是.schema(仅咖啡和评级表)
创建表咖啡评级( id 整数主键自动增量, 咖啡 ID 整数, 香气_ID INTEGER, 味道_id 整数, body_id 整数, 苦味_id INTEGER, sourness_id INTEGER, 评级整数不为空, 投票整数不为空, 外键(coffee_id)引用咖啡(id), 外键(aroma_id)参考香气(id), 外键(taste_id)参考品味(id), 外键(body_id)参考body(id), 外键(bitterness_id)参考bitterness(id) );
创建餐桌咖啡( id 整数主键自动增量, 名称文本不为空, 烘焙文本, 国家文本, 各种文字, 农场文本 ); 创建餐桌香气( id 整数主键自动增量, 香气名称 TEXT NOT NULL ); 预先感谢您的帮助。
干杯 尼科
cs50
execute
返回字典列表。这个 coffee_id = coffee_id[0]
是 execute
返回的第一个 row,根据错误消息,它是
{'id': 1}
。插入查询需要第一行中键id
的值。