#!/bin/python from sqlalchemy import ( Column, Date, ForeignKey, Integer, Numeric, String, UniqueConstraint, ) from sqlalchemy.orm import DeclarativeBase, relationship class BaseModelDb(DeclarativeBase): pass class CategoryDb(BaseModelDb): __tablename__ = "category" __table_args__ = ( UniqueConstraint("name", "parent_id", name="uq_category_name_parent"), ) id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String, nullable=False) parent_id = Column(Integer, ForeignKey("category.id"), nullable=True) # Relationships parent = relationship( "CategoryDb", remote_side="CategoryDb.id", back_populates="children" ) children = relationship("CategoryDb", back_populates="parent") UniqueConstraint("name", "parent_id", name="uq_category_name_parent") class B4wDb(BaseModelDb): __tablename__ = "import_b4w" id = Column(Integer, primary_key=True, autoincrement=True) id_b4w = Column(Integer, nullable=False, unique=True) account_iban = Column(String, nullable=False) account_currency = Column(String(3), nullable=False) date_valid = Column(Date, nullable=False) date_book = Column(Date, nullable=True) amount = Column(Numeric(12, 2), nullable=False) amount_currency = Column(String(3), nullable=False) sign = Column(Integer, nullable=False) reference = Column(String, nullable=True) other_name = Column(String, nullable=True) other_iban = Column(String, nullable=True) category_id = Column(Integer, ForeignKey("category.id"), nullable=True) notes = Column(String, nullable=True) # relationship category = relationship("CategoryDb")