Как добавить содержимое из списка словарей в таблицу с помощью sqlalchemy?

#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 like x = Post(content='<content data>,title='<title data>') db.session.add(x) db.session.commit() и просмотрите данные с помощью Post.query.all()

5. На данный момент я больше не знаю, что изменить в своем коде. Если вы скажете мне, как обрабатывать после этого, это окажет мне услугу