SQLITE3完整性错误:为什么我会这样做?

时间:2018-04-26 09:11:07

标签: sql flask sqlite

我讨厌它如何确切地说出错误是什么,但我已经探究过它是否是导致此错误的数据类型。

这是我的错误功能:

def insert_recipe(recipe_id, recipe_name, img_link, recipe_link):
    with sql.connect('app.db') as connection:
        cursor = connection.cursor()
        cursor.execute("INSERT INTO recipes (recipe_id, recipe_name, img_link, recipe_link) VALUES (?,?,?,?)", (recipe_id, recipe_name, img_link, recipe_link))
        connection.commit()

这是错误页面: image

这是我的功能,导致它在我的个人资料中显示:

@app.route('/profile', methods=['GET', 'POST'])
@login_required
def display_profile():
    id = request.values.get('id')
    title = request.values.get('title')
    img_link = request.values.get('img_link')
    link = request.values.get('link')
    print(type(id), type(title), type(img_link), type(link))
    insert_recipe(id, title, img_link, link)
    insert_savedRecipes(current_user.id, id)
    recipes = loadSavedRecipes()
    return render_template('profile.html', name=current_user.username, recipes=recipes)

我的SQL架构:

CREATE TABLE recipes (
  r_id integer PRIMARY KEY,
  recipe_id text NOT NULL,
  recipe_name text NOT NULL,
  img_link text NOT NULL,
  recipe_link text NOT NULL
);

我检查了所有列的数据类型,根据终端,它们都是字符串。此外,该函数似乎有效,因为它将配方插入到数据库表配方中。但是,当我单击导航栏中的配置文件选项卡时,这就是所有错误。

所以我不确定为什么当我的桌子正好如下图所示插入时会出现此错误:

table

1 个答案:

答案 0 :(得分:0)

表中的所有列都设置为NOT NULL,而第一个(R_ID)设置为PRIMARY KEY,无论如何都不能为NULL。所以 - INSERT必须插入所有5列才能使其正常工作。

另一方面,您插入4列。

请注意您附加的屏幕截图的最后一行:

  

sqllite3.IntegrityError:NOT NULL约束失败:recipes.recipe_id

因此,请确保您确实将RECIPE_ID传递给该函数。