Pull to refresh

Comments 3

Не рассматривали использование sqlalchemy? Мне эта библиотека очень упростила работу с БД и повысила читаемость кода. Сейчас использую даже если нужна одна таблица в БД.

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

Инициализация ORM
from sqlalchemy import create_engine, Column, REAL, TEXT
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

engine = create_engine('sqlite:///data.db')
Base = declarative_base()
Session = sessionmaker(bind=engine)


class Item(Base):
    __tablename__ = 'items'
    url = Column(TEXT, primary_key=True)
    title = Column(TEXT)
    old_price = Column(REAL)
    price = Column(REAL)

    def __init__(self, url: str, title: str, old_price: float, price: float) -> None:
        self.url = url
        self.title = title
        self.price = price
        self.old_price = old_price

    def __repr__(self):
        return f'<Item {self.title}>'


class SQLAlc(object):
    def __init__(self):
        self.__session = Session()

    def add_item(self, item):
        self.__session.add(item)
        self.__session.commit()
        return item

    def create_if_not_exist(self, item):
        exist = self.__session.query(Item).filter_by(url=item.url).first()
        if exist:
            return None
        else:
            self.add_item(item)
            return item

    def __del__(self):
        self.__session.close()


def init_db():
    Base.metadata.create_all(bind=engine)



И потом ипользуем следующим образом:

new_item = Item(url, title, old_price, price)
sqa = SQLAlc()
sqa.create_if_not_exist(new_item)


И это лишь верхушка айсберга sqlalchemy.
Only those users with full accounts are able to leave comments. Log in, please.