From 2f29aa4ff637ac6f6c7757fdbda78699e8c9385a Mon Sep 17 00:00:00 2001 From: eclipse Date: Wed, 16 Jul 2025 21:26:04 +0200 Subject: [PATCH] split generated code into tables and declarative ORM classes --- utils/sqlacodegen_declarative.py | 183 +++++++++++++++++++++++++++++++ utils/sqlacodegen_tables.py | 2 + 2 files changed, 185 insertions(+) create mode 100644 utils/sqlacodegen_declarative.py diff --git a/utils/sqlacodegen_declarative.py b/utils/sqlacodegen_declarative.py new file mode 100644 index 0000000..70013ad --- /dev/null +++ b/utils/sqlacodegen_declarative.py @@ -0,0 +1,183 @@ +# File contains output of `sqlacodegen --generator declarative sqlite:///path/to/the_works.sqlite` + +from typing import List, Optional + +from sqlalchemy import Column, ForeignKey, Integer, LargeBinary, Table, Text +from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship + +class Base(DeclarativeBase): + pass + + +class Genre(Base): + __tablename__ = 'Genre' + + Genre: Mapped[str] = mapped_column(Text) + ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True) + + Text_: Mapped[List['Text_']] = relationship('Text_', secondary='Text_Genre', back_populates='Genre_') + Werk: Mapped[List['Werk']] = relationship('Werk', secondary='Werk_Genre', back_populates='Genre_') + + +class Herausgeber(Base): + __tablename__ = 'Herausgeber' + + Name: Mapped[str] = mapped_column(Text) + ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True) + + Werk: Mapped[List['Werk']] = relationship('Werk', secondary='Werk_Herausgeber', back_populates='Herausgeber_') + + +class Pseudonym(Base): + __tablename__ = 'Pseudonym' + + Pseudonym: Mapped[str] = mapped_column(Text) + ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True) + + Veroeffentlichung: Mapped[List['Veroeffentlichung']] = relationship('Veroeffentlichung', back_populates='Pseudonym1') + + +class Sprache(Base): + __tablename__ = 'Sprache' + + Sprache: Mapped[str] = mapped_column(Text) + ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True) + + Text_: Mapped[List['Text_']] = relationship('Text_', back_populates='Sprache1') + + +class Textform(Base): + __tablename__ = 'Textform' + + Textform: Mapped[str] = mapped_column(Text) + ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True) + + Text_: Mapped[List['Text_']] = relationship('Text_', back_populates='Textform1') + + +class Titelbild(Base): + __tablename__ = 'Titelbild' + + Mimetype: Mapped[str] = mapped_column(Text) + Dateiname: Mapped[str] = mapped_column(Text) + Dateigroesse: Mapped[int] = mapped_column(Integer) + Breite: Mapped[int] = mapped_column(Integer) + Hoehe: Mapped[int] = mapped_column(Integer) + Bild: Mapped[bytes] = mapped_column(LargeBinary) + Thumbnail: Mapped[bytes] = mapped_column(LargeBinary) + sha256: Mapped[str] = mapped_column(Text, unique=True) + ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True) + + Werk: Mapped[List['Werk']] = relationship('Werk', back_populates='Titelbild1') + + +class Verlag(Base): + __tablename__ = 'Verlag' + + Verlag: Mapped[str] = mapped_column(Text) + ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True) + + Reihe: Mapped[List['Reihe']] = relationship('Reihe', back_populates='Verlag1') + Werk: Mapped[List['Werk']] = relationship('Werk', back_populates='Verlag1') + + +class Werksform(Base): + __tablename__ = 'Werksform' + + Werksform: Mapped[str] = mapped_column(Text) + ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True) + + Werk: Mapped[List['Werk']] = relationship('Werk', back_populates='Werksform1') + + +class Reihe(Base): + __tablename__ = 'Reihe' + + Titel: Mapped[str] = mapped_column(Text) + ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True) + Verlag_: Mapped[Optional[str]] = mapped_column('Verlag', ForeignKey('Verlag.ID')) + + Verlag1: Mapped[Optional['Verlag']] = relationship('Verlag', back_populates='Reihe') + Text_: Mapped[List['Text_']] = relationship('Text_', back_populates='Reihe1') + Werk: Mapped[List['Werk']] = relationship('Werk', back_populates='Reihe1') + + +class Text_(Base): + __tablename__ = 'Text' + + Titel: Mapped[str] = mapped_column(Text) + ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True) + Untertitel: Mapped[Optional[str]] = mapped_column(Text) + Reihe_: Mapped[Optional[int]] = mapped_column('Reihe', ForeignKey('Reihe.ID')) + Textform_: Mapped[Optional[int]] = mapped_column('Textform', ForeignKey('Textform.ID')) + Sprache_: Mapped[Optional[int]] = mapped_column('Sprache', ForeignKey('Sprache.ID')) + + Genre_: Mapped[List['Genre']] = relationship('Genre', secondary='Text_Genre', back_populates='Text_') + Reihe1: Mapped[Optional['Reihe']] = relationship('Reihe', back_populates='Text_') + Sprache1: Mapped[Optional['Sprache']] = relationship('Sprache', back_populates='Text_') + Textform1: Mapped[Optional['Textform']] = relationship('Textform', back_populates='Text_') + Veroeffentlichung: Mapped[List['Veroeffentlichung']] = relationship('Veroeffentlichung', back_populates='Text2') + + +class Werk(Base): + __tablename__ = 'Werk' + + Titel: Mapped[str] = mapped_column(Text) + ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True) + Untertitel: Mapped[Optional[str]] = mapped_column(Text) + Werksform_: Mapped[Optional[int]] = mapped_column('Werksform', ForeignKey('Werksform.ID')) + Verlag_: Mapped[Optional[int]] = mapped_column('Verlag', ForeignKey('Verlag.ID')) + Reihe_: Mapped[Optional[int]] = mapped_column('Reihe', ForeignKey('Reihe.ID')) + Reihennummer: Mapped[Optional[str]] = mapped_column(Text) + Erscheinungsdatum: Mapped[Optional[str]] = mapped_column(Text) + ISBN_13: Mapped[Optional[str]] = mapped_column(Text) + ISBN_10: Mapped[Optional[str]] = mapped_column(Text) + ISSN: Mapped[Optional[str]] = mapped_column(Text) + Preis: Mapped[Optional[str]] = mapped_column(Text) + Titelbild_: Mapped[Optional[int]] = mapped_column('Titelbild', ForeignKey('Titelbild.ID')) + Klappentext: Mapped[Optional[str]] = mapped_column(Text) + Anmerkungen: Mapped[Optional[str]] = mapped_column(Text) + + Genre_: Mapped[List['Genre']] = relationship('Genre', secondary='Werk_Genre', back_populates='Werk') + Herausgeber_: Mapped[List['Herausgeber']] = relationship('Herausgeber', secondary='Werk_Herausgeber', back_populates='Werk') + Reihe1: Mapped[Optional['Reihe']] = relationship('Reihe', back_populates='Werk') + Titelbild1: Mapped[Optional['Titelbild']] = relationship('Titelbild', back_populates='Werk') + Verlag1: Mapped[Optional['Verlag']] = relationship('Verlag', back_populates='Werk') + Werksform1: Mapped[Optional['Werksform']] = relationship('Werksform', back_populates='Werk') + Veroeffentlichung: Mapped[List['Veroeffentlichung']] = relationship('Veroeffentlichung', back_populates='Werk1') + + +t_Text_Genre = Table( + 'Text_Genre', Base.metadata, + Column('Text', ForeignKey('Text.ID'), primary_key=True), + Column('Genre', ForeignKey('Genre.ID'), primary_key=True) +) + + +class Veroeffentlichung(Base): + __tablename__ = 'Veroeffentlichung' + + Text1: Mapped[int] = mapped_column('Text', ForeignKey('Text.ID')) + Werk_: Mapped[int] = mapped_column('Werk', ForeignKey('Werk.ID')) + Pseudonym_: Mapped[int] = mapped_column('Pseudonym', ForeignKey('Pseudonym.ID')) + ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True) + AltTitel: Mapped[Optional[str]] = mapped_column(Text) + AltUntertitel: Mapped[Optional[str]] = mapped_column(Text) + + Pseudonym1: Mapped['Pseudonym'] = relationship('Pseudonym', back_populates='Veroeffentlichung') + Text2: Mapped['Text_'] = relationship('Text_', back_populates='Veroeffentlichung') + Werk1: Mapped['Werk'] = relationship('Werk', back_populates='Veroeffentlichung') + + +t_Werk_Genre = Table( + 'Werk_Genre', Base.metadata, + Column('Werk', ForeignKey('Werk.ID'), primary_key=True), + Column('Genre', ForeignKey('Genre.ID'), primary_key=True) +) + + +t_Werk_Herausgeber = Table( + 'Werk_Herausgeber', Base.metadata, + Column('Herausgeber', ForeignKey('Herausgeber.ID'), primary_key=True), + Column('Werk', ForeignKey('Werk.ID'), primary_key=True) +) diff --git a/utils/sqlacodegen_tables.py b/utils/sqlacodegen_tables.py index 2b4ccb8..542673b 100644 --- a/utils/sqlacodegen_tables.py +++ b/utils/sqlacodegen_tables.py @@ -1,3 +1,5 @@ +# File contains output of `sqlacodegen --generator tables sqlite:///path/to/the_works.sqlite` + from sqlalchemy import Column, ForeignKey, Integer, LargeBinary, MetaData, Table, Text metadata = MetaData()