changed all table names to singular form; all DB transactions now use true ORM patterns
This commit is contained in:
parent
2a3f4ff89a
commit
df9d59d7ae
@ -1,27 +1,27 @@
|
|||||||
from the_works.database import db
|
from the_works.database import db
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
class Texte(db.Model):
|
class Text(db.Model):
|
||||||
__table__ = db.Model.metadata.tables['Texte']
|
__table__ = db.Model.metadata.tables['Text']
|
||||||
reihe = relationship("Reihen", back_populates="texte")
|
reihe = relationship("Reihe", back_populates="texte")
|
||||||
textform = relationship("Textformen", back_populates="texte")
|
textform = relationship("Textform", back_populates="texte")
|
||||||
sprache = relationship("Sprachen", back_populates="texte")
|
sprache = relationship("Sprache", back_populates="texte")
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"Texte(ID={self.ID}, Titel={self.Titel}, Untertitel={self.Untertitel}, Reihe={self.Reihe})"
|
return f"Text(ID={self.ID}, Titel={self.Titel}, Untertitel={self.Untertitel}, Reihe={self.Reihe})"
|
||||||
|
|
||||||
class Werke(db.Model):
|
class Werk(db.Model):
|
||||||
__table__ = db.Model.metadata.tables['Werke']
|
__table__ = db.Model.metadata.tables['Werk']
|
||||||
|
|
||||||
class Reihen(db.Model):
|
class Reihe(db.Model):
|
||||||
__table__ = db.Model.metadata.tables['Reihen']
|
__table__ = db.Model.metadata.tables['Reihe']
|
||||||
texte = relationship("Texte", back_populates="reihe")
|
texte = relationship("Text", back_populates="reihe")
|
||||||
|
|
||||||
class Textformen(db.Model):
|
class Textform(db.Model):
|
||||||
__table__ = db.Model.metadata.tables['Textformen']
|
__table__ = db.Model.metadata.tables['Textform']
|
||||||
texte = relationship("Texte", back_populates="textform")
|
texte = relationship("Text", back_populates="textform")
|
||||||
|
|
||||||
class Sprachen(db.Model):
|
class Sprache(db.Model):
|
||||||
__table__ = db.Model.metadata.tables['Sprachen']
|
__table__ = db.Model.metadata.tables['Sprache']
|
||||||
texte = relationship("Texte", back_populates="sprache")
|
texte = relationship("Text", back_populates="sprache")
|
||||||
|
|
||||||
|
|||||||
2
the_works/templates/modals.html
Normal file
2
the_works/templates/modals.html
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
{% macro bla(var1, var2, var3='var3_default') -%}
|
||||||
|
{%- endmacro %}
|
||||||
@ -1,67 +1,70 @@
|
|||||||
from flask import Blueprint, render_template, request, redirect, flash, url_for
|
from flask import Blueprint, render_template, request, redirect, flash, url_for
|
||||||
from sqlalchemy import select, insert, update, delete
|
from sqlalchemy import select, insert, update, delete
|
||||||
from the_works.database import db
|
from the_works.database import db
|
||||||
from the_works.models import Texte, Reihen, Sprachen, Textformen
|
from the_works.models import Text, Reihe, Sprache, Textform
|
||||||
|
|
||||||
bp = Blueprint("text", __name__)
|
bp = Blueprint("text", __name__)
|
||||||
|
|
||||||
@bp.route("/text")
|
|
||||||
@bp.route("/text/all")
|
@bp.route("/text/all")
|
||||||
|
@bp.route("/text")
|
||||||
def read():
|
def read():
|
||||||
# build ORM equivalent of SELECT statement
|
# build ORM equivalent of SELECT statement
|
||||||
stmt = (
|
stmt = (
|
||||||
select(Texte, Reihen, Textformen, Sprachen)
|
select(Text, Reihe, Textform, Sprache)
|
||||||
.join(Texte.textform, isouter=True)
|
.join(Text.textform, isouter=True)
|
||||||
.join(Texte.reihe, isouter=True)
|
.join(Text.reihe, isouter=True)
|
||||||
.join(Texte.sprache, isouter=True)
|
.join(Text.sprache, isouter=True)
|
||||||
)
|
)
|
||||||
# condense result into list of dicts
|
# condense result into list of dicts
|
||||||
texte = []
|
texte = []
|
||||||
for row in db.session.execute(stmt):
|
for row in db.session.execute(stmt):
|
||||||
texte.append({
|
texte.append({
|
||||||
"id": row.Texte.ID,
|
"id": row.Text.ID,
|
||||||
"titel": row.Texte.Titel,
|
"titel": row.Text.Titel,
|
||||||
"untertitel": row.Texte.Untertitel or "",
|
"untertitel": row.Text.Untertitel or "",
|
||||||
"reihe": row.Reihen.Reihentitel if row.Reihen else "",
|
"reihe": row.Reihe.Titel if row.Reihe else "",
|
||||||
"r_id": str(row.Reihen.ID) if row.Reihen else "",
|
"r_id": str(row.Reihe.ID) if row.Reihe else "",
|
||||||
"textform": row.Textformen.Textform if row.Textformen else "",
|
"textform": row.Textform.Textform if row.Textform else "",
|
||||||
"tf_id": str(row.Textformen.ID) if row.Textformen else "",
|
"tf_id": str(row.Textform.ID) if row.Textform else "",
|
||||||
"sprache": row.Sprachen.Sprache,
|
"sprache": row.Sprache.Sprache,
|
||||||
"s_id": str(row.Sprachen.ID) if row.Sprachen else ""
|
"s_id": str(row.Sprache.ID) if row.Sprache else ""
|
||||||
})
|
})
|
||||||
return render_template("views/text.html", texte=texte, reihen=db.session.scalars(select(Reihen)), textformen=db.session.scalars(select(Textformen)), sprachen=db.session.scalars(select(Sprachen)))
|
return render_template("views/text.html", texte=texte, reihen=db.session.scalars(select(Reihe)), textformen=db.session.scalars(select(Textform)), sprachen=db.session.scalars(select(Sprache)))
|
||||||
|
|
||||||
@bp.route("/text/create", methods=["POST"])
|
@bp.route("/text/create", methods=["POST"])
|
||||||
def create():
|
def create():
|
||||||
stmt = insert(Texte).values(form_to_dict(request.form))
|
db.session.add(Text(
|
||||||
db.session.execute(stmt)
|
Titel = request.form["text_titel"],
|
||||||
|
Untertitel = request.form["text_untertitel"] or None,
|
||||||
|
Reihe = request.form["text_reihe"] or None,
|
||||||
|
Textform = request.form["text_textform"],
|
||||||
|
Sprache = request.form["text_sprache"]
|
||||||
|
))
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
flash("Eintrag erfolgreich hinzugefügt")
|
flash("Eintrag erfolgreich hinzugefügt")
|
||||||
return redirect(url_for("views.text.read"))
|
return redirect(url_for("text.read"))
|
||||||
|
|
||||||
@bp.route("/text/update/<int:id>", methods=["POST"])
|
@bp.route("/text/update/<int:id>", methods=["POST"])
|
||||||
def update(id):
|
def update(id):
|
||||||
stmt = update(Texte).where(Texte.ID == id).values(form_to_dict(request.form))
|
# get record
|
||||||
db.session.execute(stmt)
|
text = db.session.get(Text, id)
|
||||||
|
# update values
|
||||||
|
text.Titel = request.form["text_titel"]
|
||||||
|
text.Untertitel = request.form["text_untertitel"] or None
|
||||||
|
text.Reihe = request.form["text_reihe"] or None
|
||||||
|
text.Textform = request.form["text_textform"]
|
||||||
|
text.Sprache = request.form["text_sprache"]
|
||||||
|
# commit changes
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
flash("Eintrag erfolgreich geändert")
|
flash("Eintrag erfolgreich geändert")
|
||||||
return redirect(url_for("views.text.read"))
|
return redirect(url_for("text.read"))
|
||||||
|
|
||||||
|
|
||||||
@bp.route("/text/delete/<int:id>")
|
@bp.route("/text/delete/<int:id>")
|
||||||
def delete(id):
|
def delete(id):
|
||||||
stmt = delete(Texte).where(Texte.ID == id)
|
text = db.session.get(Text, id)
|
||||||
db.session.execute(stmt)
|
db.session.delete(text)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
flash("Eintrag erfolgreich gelöscht")
|
flash("Eintrag erfolgreich gelöscht")
|
||||||
return redirect(url_for("views.text.read"))
|
return redirect(url_for("text.read"))
|
||||||
|
|
||||||
|
|
||||||
def form_to_dict(form):
|
|
||||||
return {
|
|
||||||
"Titel": form["text_titel"],
|
|
||||||
"Untertitel": form["text_untertitel"] or None,
|
|
||||||
"Reihe": form["text_reihe"] or None,
|
|
||||||
"Textform": form["text_textform"],
|
|
||||||
"Originalsprache": form["text_sprache"]
|
|
||||||
}
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user