diff --git a/the_works/database.py b/the_works/database.py index c5bd12c..fd35f2b 100644 --- a/the_works/database.py +++ b/the_works/database.py @@ -5,4 +5,14 @@ db = SQLAlchemy() def init_db(app): db.init_app(app) with app.app_context(): - db.reflect() \ No newline at end of file + print(f"number of db tables is {len(db.metadata.tables)}") + + # populate an empty DB with fresh tables + #TODO: maybe add tables to metadata in any case since tables won't get overwritten + if not len(db.metadata.tables): + from the_works.tables import add_tables + add_tables(db.metadata) + db.metadata.create_all(db.engine) + print(f"and now number of db tables is {len(db.metadata.tables)}") + + db.reflect() diff --git a/the_works/tables.py b/the_works/tables.py new file mode 100644 index 0000000..c2ea897 --- /dev/null +++ b/the_works/tables.py @@ -0,0 +1,123 @@ +# File content is based on the output of `sqlacodegen --generator tables sqlite:///path/to/the_works.sqlite` + +from sqlalchemy import Column, ForeignKey, Integer, LargeBinary, MetaData, Table, Text + +def add_tables(metadata): + t_Genre = Table( + 'Genre', metadata, + Column('ID', Integer, primary_key=True), + Column('Genre', Text, nullable=False) + ) + + t_Herausgeber = Table( + 'Herausgeber', metadata, + Column('ID', Integer, primary_key=True), + Column('Name', Text, nullable=False) + ) + + t_Pseudonym = Table( + 'Pseudonym', metadata, + Column('ID', Integer, primary_key=True), + Column('Pseudonym', Text, nullable=False) + ) + + t_Sprache = Table( + 'Sprache', metadata, + Column('ID', Integer, primary_key=True), + Column('Sprache', Text, nullable=False) + ) + + t_Textform = Table( + 'Textform', metadata, + Column('ID', Integer, primary_key=True), + Column('Textform', Text, nullable=False) + ) + + t_Titelbild = Table( + 'Titelbild', metadata, + Column('ID', Integer, primary_key=True), + Column('Mimetype', Text, nullable=False), + Column('Dateiname', Text, nullable=False), + Column('Dateigroesse', Integer, nullable=False), + Column('Breite', Integer, nullable=False), + Column('Hoehe', Integer, nullable=False), + Column('Bild', LargeBinary, nullable=False), + Column('Thumbnail', LargeBinary, nullable=False), + Column('sha256', Text, nullable=False, unique=True) + ) + + t_Verlag = Table( + 'Verlag', metadata, + Column('ID', Integer, primary_key=True), + Column('Verlag', Text, nullable=False) + ) + + t_Werksform = Table( + 'Werksform', metadata, + Column('ID', Integer, primary_key=True), + Column('Werksform', Text, nullable=False) + ) + + t_Reihe = Table( + 'Reihe', metadata, + Column('ID', Integer, primary_key=True), + Column('Titel', Text, nullable=False), + Column('Verlag', ForeignKey('Verlag.ID')) + ) + + t_Text = Table( + 'Text', metadata, + Column('ID', Integer, primary_key=True), + Column('Titel', Text, nullable=False), + Column('Untertitel', Text), + Column('Reihe', ForeignKey('Reihe.ID')), + Column('Textform', ForeignKey('Textform.ID')), + Column('Sprache', ForeignKey('Sprache.ID')) + ) + + t_Werk = Table( + 'Werk', metadata, + Column('ID', Integer, primary_key=True), + Column('Titel', Text, nullable=False), + Column('Untertitel', Text), + Column('Werksform', ForeignKey('Werksform.ID')), + Column('Verlag', ForeignKey('Verlag.ID')), + Column('Reihe', ForeignKey('Reihe.ID')), + Column('Reihennummer', Text), + Column('Erscheinungsdatum', Text), + Column('ISBN_13', Text), + Column('ISBN_10', Text), + Column('ISSN', Text), + Column('Preis', Text), + Column('Titelbild', ForeignKey('Titelbild.ID')), + Column('Klappentext', Text), + Column('Anmerkungen', Text) + ) + + t_Text_Genre = Table( + 'Text_Genre', metadata, + Column('Text', ForeignKey('Text.ID'), primary_key=True), + Column('Genre', ForeignKey('Genre.ID'), primary_key=True) + ) + + t_Veroeffentlichung = Table( + 'Veroeffentlichung', metadata, + Column('ID', Integer, primary_key=True), + Column('Text', ForeignKey('Text.ID'), nullable=False), + Column('Werk', ForeignKey('Werk.ID'), nullable=False), + Column('AltTitel', Text), + Column('AltUntertitel', Text), + Column('Pseudonym', ForeignKey('Pseudonym.ID'), nullable=False) + ) + + t_Werk_Genre = Table( + 'Werk_Genre', metadata, + Column('Werk', ForeignKey('Werk.ID'), primary_key=True), + Column('Genre', ForeignKey('Genre.ID'), primary_key=True) + ) + + t_Werk_Herausgeber = Table( + 'Werk_Herausgeber', metadata, + Column('Herausgeber', ForeignKey('Herausgeber.ID'), primary_key=True), + Column('Werk', ForeignKey('Werk.ID'), primary_key=True) + )