Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/103: Рейтинг темы: голосов - 103, средняя оценка - 4.59
0 / 0 / 1
Регистрация: 24.01.2018
Сообщений: 23

Ошибка sqlite: NOT NULL constraint failed

05.10.2018, 21:12. Показов 20185. Ответов 2

Студворк — интернет-сервис помощи студентам
В учебных целях передо мной стояла такая задача:Сделать возможность добавлять пост в БД и коммент для каждого поста. Выводить все через jinja. Отправка данных происходит через PostMan.
Собственно таблицы.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from datetime import date
from app import db
 
 
class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    article = db.Column(db.String(100), unique=True, nullable=False)
    text= db.Column(db.String(3000), unique=False, nullable=False)
    created_date =db.Column(db.Date, default=date.today)
 
class Comments(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    post_id = db.Column(
        db.Integer,
        db.ForeignKey('post.id'),
        nullable=False,
        index=True,
        )
    posts = db.relationship(Post, foreign_keys=[post_id, ])
    comm = db.Column(db.String(80), unique=True, nullable=False)
    comm_created_date =db.Column(db.Date, default=date.today)
При попытке добавить комментарий, мне выдает данную ошибку:

SQL
1
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL CONSTRAINT failed: comments.post_id [SQL: 'INSERT INTO comments (post_id, comm, comm_created_date) VALUES (?, ?, ?)'] [parameters: (NONE, 'Good', '2018-10-05')]
Пример того, что я шлю в комментарии через PostMan:
Key-Value
post_id-1
comm-Good

Если поставить default(Например "1")после db.ForeignKey, то коммент добавляется для поста с таким id. Но для других никак.
На всякий случай код основного файла:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from flask import Flask, request, render_template, flash
from flask_sqlalchemy import SQLAlchemy
import config as config
 
app = Flask(__name__, template_folder='templates')
app.config.from_object(config)
 
db = SQLAlchemy(app)
 
@app.route('/', methods=['GET', 'POST'])
def index():
    from models import Post, Comments
    from form import PostForm, CommentsForm
 
    if request.method == 'POST':
        print(request.form)
        form = PostForm(request.form)
        comments_form = CommentsForm(request.form)
 
        if form.validate():
            post = Post(**form.data)
            db.session.add(post)
            db.session.commit()
            flash('Post created!')
        elif comments_form.validate():
            comm = Comments(**comments_form.data)
            db.session.add(comm)
            db.session.commit() 
            flash('Comms created!')
        else:
            flash('Form is not valid! Post was not created.')
            flash(str(form.errors))
    posts = Post.query.all()
    comms = Comments.query.all()
    return render_template('basic_template.txt', posts = posts, comms=comms)
 
if __name__ == '__main__':
    from models import *
 
    db.create_all()
    app.run()
Разобраться самостоятельно не получилось. Не могу понять суть проблемы.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.10.2018, 21:12
Ответы с готовыми решениями:

NOT NULL constraint failed откуда ошибка?
Всем привет! class Profile(AbstractUser): #user = models.OneToOneField(User, on_delete=models.CASCADE) Family =...

Ошибка «NOT NULL constraint failed: mainapp_cartproduct.user_id»?
Всем привет! После того как добавил на сайт регистрацию стала появляться ошибка при добавлении товара в корзину IntegrityError at...

NOT NULL constraint failed
Здравствуйте. Встал вопрос, при попытки сохранить в БД. Выдает ошибку NOT NULL constraint failed: scrapping_vacancy.language_id ...

2
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
06.10.2018, 16:47
Лучший ответ Сообщение было отмечено Jef_Chenger как решение

Решение

1) Внешнему ключу невозможно (по умолчанию) задать Null\None (и это правильно, иначе нафига вообще связь таблиц, если есть возможность вставлять комменты не привязанные ни к каким постам? комменты в таком случае будут "висячими")
2) Вы делаете вставку только двух значений, в то время как в SQL выражении указаны три поля, в том числе post_id. Почему вы так делаете? Или sqlalchemy должна сама находить этот id?

Использование вставки дефолтного значения вам ничего не даст - внешний ключ наследует ограничения родительского ключа и так как родительский ключ у вас это первичный ключ главной таблицы, то вторичный также должен быть уникальным и совпадать с первичным родительской таблицы.
А ваша дефолтная единичка имеет уникальность только при первой вставке. Делайте выводы.

Добавлено через 41 минуту
P.S. Связь (relationship) типа "один-ко-многим" указывается, судя по документации - в родительской таблице.
1
0 / 0 / 1
Регистрация: 24.01.2018
Сообщений: 23
09.10.2018, 23:40  [ТС]
Спасибо за ответ. Проблему удалось решить, добавив в форму указание на то, что нужно брать значение post_id. Я про это забыл.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.10.2018, 23:40
Помогаю со студенческими работами здесь

Ошибка: IntegrityError sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL constraint failed
При попытке внести данные в форму на сайте, выдаёт ошибку: IntegrityError sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT...

Error Code: 1822. Failed to add the foreign key constraint. Missing index for constraint 'fk_p_orders_p_stores1' in the
Всем привет, помогите пожалуйста решить проблему. При создании бд вылазит ошибка - Error Code: 1822. Failed to add the foreign key...

Error Code: 1822. Failed to add the foreign key constraint. Missing index for constraint 'Object' in the referenced tabl
ошибка в возникающая в MySQL Workbench см.скрин (вероятно то, чего касается ошибка).

UPDATE SELECT, ERROR: null value in column violates not-null constraint
Здравствуйте. Две таблицы, из одной значением integer модифицируется int другой таблицы. В таблице-приёмнике ограничение NOT NULL. ...

Ошибка Debug Asserition Failed Expression:(stream !=NULL)
Задание: Написать графф и в нем реализовать алгоритм Дейкстры и обход в ширину и высоту. (Прикрепляю код и скрин с ошибкой) помогите, кто...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru