Задать вопрос
@mrkovalchuk
Junior developer

Scrapy + django-item + postgresql (sqlalchemy), как заммапить класс?

Использую данный стек в проекте. Вылетает следующая ошибка:

sqlalchemy.orm.exc.UnmappedInstanceError: Class news_scrap.items.NewsItem' is not mapped.


Вроде и понимаю, в чем дело, но как исправить, ума не приложу. Интернет подсказывает как работать, если у тебя нет django-item, а с ним - хз. Надеюсь на Вас. Ниже scrapy файлы.

Items.py
from scrapy_djangoitem import DjangoItem
from main.models import News

class NewsItem(DjangoItem):
    django_model = News
    __tablename__ = "main_news"


Models.py
from sqlalchemy import *
from sqlalchemy.engine.url import URL
from . import settings

def db_connect():
    """
    Performs database connection using database settings from settings.py.
    Returns sqlalchemy engine instance
    """
    return create_engine(URL(**settings.DATABASE))


Pipelines.py
from sqlalchemy.orm import sessionmaker
from .items import NewsItem
from .models import db_connect

class NewsScrapPipeline(object):
    def __init__(self):
        """
        Initializes database connection and sessionmaker.
        Creates deals table.
        """
        #log.INFO('First Point')
        engine = db_connect()
        self.Session = sessionmaker(bind=engine)

    def process_item(self, item, spider):

        session = self.Session()
        news = NewsItem(**item)
        #log.INFO('This Point')

        try:
            session.add(news)
            session.commit()
        except:
            session.rollback()
            raise
        finally:
            session.close()

        return item


Если нужны еще какие-либо участки когда, говорите.
  • Вопрос задан
  • 966 просмотров
Подписаться 1 Оценить 9 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы