Ошибка целостности SQLITE3: почему я это получаю? - PullRequest
0 голосов
/ 26 апреля 2018

Я ненавижу то, что это не говорит точно, что это за ошибка, но я исследовал, был ли это тип данных, вызвавший эту ошибку.

Это моя функция с ошибкой:

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 голосов
/ 26 апреля 2018

Для всех столбцов таблицы установлено значение NOT NULL, а для первого столбца (R_ID) установлено значение PRIMARY KEY, которое в любом случае не может быть равно NULL. Так что - INSERT должен вставить все 5 столбцов, чтобы он работал.

С другой стороны, вы вставляете 4 столбца.

Обратите внимание на последнюю строку скриншота, который вы прикрепили:

sqllite3.IntegrityError: Сбой ограничения NOT NULL: recipes.recipe_id

Итак, убедитесь, что вы действительно передали RECIPE_ID функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...