#python #sqlalchemy
#python #sqlalchemy
Вопрос:
Я пытаюсь добавлять одно за другим содержимое из списка словарей в таблицу с помощью sqlalchemy
posts = [
{
'title': 'Version 8.0 Coming Soon',
'content': 'As outlined in Ending Python 2 Support, 7.1.x will be the last version to support<br> Python 2.7 and 3.5. The next version will be 8.0 and will support Python 3.6 and<br> newer.'
},
{
'title': 'Install or Upgrade',
'content': 'Install from PyPI with pip:<br> <div class="installation"><ul><li>Drop support for Python 3.4. This will be the last version to support Python 2.7 and 3.5.</li><li>Multiple fixes in low-level Windows compatibility code.</li></ul></div>'
},
{
'title': 'Donate to Support Pallets',
'content': 'The Pallets organization accepts donations as part of the non-profit Python<br> Software Foundation (PSF). Donations through the PSF support our efforts to<br> maintain the projects and grow the community.'
},
{
'title': 'Version 2.0 Coming Soon',
'content': 'As outlined in Ending Python 2 Support, 1.0.x will be the last version to support<br> Python 2.7 and 3.5. The next version will be 2.0 and will support Python 3.6 and<br> newer.'
}
Таблица базы данных:
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
title = db.Column(db.String(150), nullable=False)
content = db.Column(db.Text, nullable=False)
Ошибка:
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL constraint failed: post.installation
Вставка
db.create_all()
for posts_in_blog in posts:
title_from_dic = posts_in_blog.get("title")
content_from_dic = posts_in_blog.get("content")
inserting_into_table = Post(title = title_from_dic, content = content_from_dic)
db.session.add(inserting_into_table)
db.session.commit()
Надеюсь, я найду решение
Спасибо за ваше время
Ответ №1:
вам нужно установить id
для autoincrement значение true или указать его значение. поскольку вы не указываете значение id, вы получаете эту ошибку
поэтому измените id = db.Column(db.Integer, primary_key=True)
на id = db.Column(db.Integer, primary_key=True, autoincrement=True)
Комментарии:
1. К сожалению, я все еще получаю эту ошибку даже после изменений:—> sqlalchemy.exc.IntegrityError: (sqlite3. Ошибка IntegrityError) НЕ удалось выполнить ограничение NOT NULL: post.installation [SQL: ВСТАВИТЬ В ЗНАЧЕНИЯ post (title, content) (?, ?)] [параметры: (‘Скоро появится версия 8.0’, ‘Как указано в разделе Прекращение поддержки Python 2, 7.1.x будет последней версией для поддержки> Python 2.7 и 3.5. Следующая версия будет 8.0 и будет поддерживать Python 3.6 и новее.’)] (Справочная информация об этой ошибке по адресу: <a rel="nofollow noreferrer noopener" href="https:///sqlalche.me/e/13/gkpj) sqlalche.me/e/13/gkpj )<—
2. Насколько я понимаю, таблица никогда не заполняется информацией
3. Если я введу это ` try: db.session.add(inserting_into_table) db.session.commit() кроме IntegrityError: db.session.rollback() `, ошибка исчезнет, но таблица по-прежнему остается пустой мертвой
4. обновить таблицу? посмотрите
inserting_into_table
, становится ли это правильным объектом table orm или нет. в противном случае попробуйте создать таблицу из fresh, используяdb.create_all()
, а затем добавьте данные в таблицу с помощью python orm likex = Post(content='<content data>,title='<title data>') db.session.add(x) db.session.commit()
и просмотрите данные с помощьюPost.query.all()
5. На данный момент я больше не знаю, что изменить в своем коде. Если вы скажете мне, как обрабатывать после этого, это окажет мне услугу