不支持的值错误。尝试将用户数据插入数据库,同时首先选择一个表中的键

问题描述 投票:0回答:1

我正在制作 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 ); 预先感谢您的帮助。

干杯 尼科

flask cs50
1个回答
0
投票

cs50

execute
返回字典列表。这个
coffee_id = coffee_id[0]
execute 返回的第一个
row
,根据错误消息,它是
{'id': 1}
。插入查询需要第一行中键
id
的值。

© www.soinside.com 2019 - 2024. All rights reserved.