Ошибка фиксации нескольких элементов в одной таблице в модели базы данных SQLite с помощью flask-sqlalchemy

При добавлении одного коммита - db.session.add(new_professor) программа выполняется правильно, при добавлении второго коммита db.session.add(prof_hindex) это ошибка:

sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL constraint failed: professors.name [SQL: INSERT INTO professors (name, hindex, date_created) VALUES (?, ?, ?)]
[parameters: (None, 25, '2022-03-20 21:14:39.624208')]

кажется, как только я попытаюсь зафиксировать два элемента в таблице, name = db.Column(db.String(100), nullable=False) будет нулевым.

МОДЕЛЬ БД

class Professors(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False)
hindex = db.Column(db.Integer)
date_created = db.Column(db.DateTime, default=datetime.utcnow)

# Return a string when adding to DB
def __repr__(self):
    return f"Professors('{self.name}','{self.hindex}')"

ПОЧТОВЫЙ МАРШРУТ

name = request.form.get("name")
if not name:
    return render_template("failure.html")

# Google Scholar API
search_query = scholarly.search_author(name)
author = next(search_query)
indices_list = (scholarly.fill(author, sections=['indices']))
hindex_int = indices_list['hindex']
# Passed variables to DB
new_professor = Professors(name=name)
prof_hindex = Professors(hindex=hindex_int)

db.session.add(new_professor)
db.session.add(prof_hindex)
db.session.commit()
return redirect("/registrants")

Не знаете, почему приведенные выше параметры показывают нуль при добавлении двух элементов в таблицу? Как бы вы добавили несколько элементов в класс?

Где вы указываете I'd? Если вы вставите одно значение без, если оно может заполнить, но не два

Kendle 20.03.2022 22:41
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Чтобы добавить одного профессора с несколькими атрибутами:

...
# Passed variables to DB
new_professor = Professors(
    name=name,
    hindex=hindex_int)

db.session.add(new_professor)
db.session.commit()
return redirect("/registrants")

Чтобы добавить несколько профессоров (рядов):

professorA = Professors(
    name=nameA,
    hindex=hindex_intA)

professorB = Professors(
    name=nameB,
    hindex=hindex_intB)

db.session.add(professorA)
db.session.add(professorB)
db.session.commit()
return redirect("/registrants")

Вы получили сообщение об ошибке, потому что пытались добавить второго профессора (строку) prof_hindex = Professors(hindex=hindex_int), но не указали атрибут name, который является обязательным полем из-за nullable=False.

Другие вопросы по теме