from sqlalchemy import Column, Integer, Text, ForeignKey, DateTime, create_engine from sqlalchemy.orm import DeclarativeBase, relationship class Base(DeclarativeBase): pass class Actress(Base): __tablename__ = "actress" id = Column(Integer, primary_key=True) name = Column(Text, unique=True, nullable=False) name_kana = Column(Text) height = Column(Integer) bust = Column(Integer) waist = Column(Integer) hip = Column(Integer) profile_url = Column(Text) aliases = relationship("ActressAlias", back_populates="actress", cascade="all, delete-orphan") class ActressAlias(Base): __tablename__ = "actress_alias" id = Column(Integer, primary_key=True) actress_id = Column(Integer, ForeignKey("actress.id"), nullable=False) alias_name = Column(Text, unique=True, nullable=False) alias_kana = Column(Text) dmm_actress_id = Column(Integer) note = Column(Text) actress = relationship("Actress", back_populates="aliases") class Label(Base): __tablename__ = "label" id = Column(Integer, primary_key=True) name = Column(Text, unique=True, nullable=False) type = Column(Text, nullable=False) wiki_url = Column(Text) parent_id = Column(Integer, ForeignKey("label.id")) children = relationship("Label", back_populates="parent", cascade="all, delete-orphan") parent = relationship("Label", back_populates="children", remote_side=[id]) class Video(Base): __tablename__ = "video" id = Column(Integer, primary_key=True) dvd_id = Column(Text, unique=True, nullable=False) prefix = Column(Text) title = Column(Text) release_date = Column(Text) cover_url = Column(Text) dmm_url = Column(Text) label_id = Column(Integer, ForeignKey("label.id")) label = relationship("Label") class VideoActress(Base): __tablename__ = "video_actress" video_id = Column(Integer, ForeignKey("video.id"), primary_key=True) actress_id = Column(Integer, ForeignKey("actress.id"), primary_key=True) role_name = Column(Text) class CrawlStatus(Base): __tablename__ = "crawl_status" page_name = Column(Text, primary_key=True) page_display_name = Column(Text) page_type = Column(Text) page_url = Column(Text) last_checked = Column(DateTime) last_updated = Column(Text) http_status = Column(Integer) error_msg = Column(Text)