Commit a79bce9944443aa228d998190c55a421d06ba94c
1 parent
6181d078
Exists in
dev
update models.py new sqlalchemy 2.0 style
Showing
1 changed file
with
39 additions
and
36 deletions
Show diff stats
aprendizations/models.py
| 1 | 1 | |
| 2 | +# FIXME Mapped[...] probably wrong for the relationships. | |
| 3 | +# See sqlalchemy documentation: | |
| 4 | +# https://docs.sqlalchemy.org/en/20/changelog/whatsnew_20.html | |
| 5 | + | |
| 6 | +from typing import List | |
| 7 | + | |
| 2 | 8 | # third party libraries |
| 3 | -from sqlalchemy import Column, ForeignKey, Integer, Float, String | |
| 4 | -from sqlalchemy.orm import declarative_base, relationship | |
| 9 | +from sqlalchemy import ForeignKey, Integer, Float, String | |
| 10 | +# from sqlalchemy.orm import declarative_base, relationship | |
| 11 | +from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship | |
| 5 | 12 | |
| 6 | 13 | |
| 7 | 14 | # =========================================================================== |
| 8 | -# Declare ORM | |
| 9 | -# FIXME Any is a workaround for mypy static type checking (see https://github.com/python/mypy/issues/6372) | |
| 10 | -# from typing import Any | |
| 11 | -# Base: Any = declarative_base() | |
| 12 | -Base = declarative_base() | |
| 13 | - | |
| 15 | +class Base(DeclarativeBase): | |
| 16 | + pass | |
| 14 | 17 | |
| 15 | 18 | # --------------------------------------------------------------------------- |
| 16 | 19 | class StudentTopic(Base): |
| 17 | 20 | __tablename__ = 'studenttopic' |
| 18 | - student_id = Column(String, ForeignKey('students.id'), primary_key=True) | |
| 19 | - topic_id = Column(String, ForeignKey('topics.id'), primary_key=True) | |
| 20 | - level = Column(Float) | |
| 21 | - date = Column(String) | |
| 21 | + student_id: Mapped[str] = mapped_column(ForeignKey('students.id'), primary_key=True) | |
| 22 | + topic_id: Mapped[str] = mapped_column(ForeignKey('topics.id'), primary_key=True) | |
| 23 | + level: Mapped[float] | |
| 24 | + date: Mapped[str] | |
| 22 | 25 | |
| 23 | - # --- | |
| 24 | - student = relationship('Student', back_populates='topics') | |
| 25 | - topic = relationship('Topic', back_populates='students') | |
| 26 | + # --- FIXME | |
| 27 | + student: Mapped["Student"] = relationship('Student', back_populates='topics') | |
| 28 | + topic: Mapped["Topic"] = relationship('Topic', back_populates='students') | |
| 26 | 29 | |
| 27 | 30 | def __repr__(self): |
| 28 | 31 | return ('StudentTopic(' |
| ... | ... | @@ -37,13 +40,13 @@ class StudentTopic(Base): |
| 37 | 40 | # --------------------------------------------------------------------------- |
| 38 | 41 | class Student(Base): |
| 39 | 42 | __tablename__ = 'students' |
| 40 | - id = Column(String, primary_key=True) | |
| 41 | - name = Column(String) | |
| 42 | - password = Column(String) | |
| 43 | + id: Mapped[str] = mapped_column(String, primary_key=True) | |
| 44 | + name: Mapped[str] | |
| 45 | + password: Mapped[str] | |
| 43 | 46 | |
| 44 | - # --- | |
| 45 | - answers = relationship('Answer', back_populates='student') | |
| 46 | - topics = relationship('StudentTopic', back_populates='student') | |
| 47 | + # --- FIXME | |
| 48 | + answers: Mapped[List["Answer"]] = relationship('Answer', back_populates='student') | |
| 49 | + topics: Mapped[List["StudentTopic"]] = relationship('StudentTopic', back_populates='student') | |
| 47 | 50 | |
| 48 | 51 | def __repr__(self): |
| 49 | 52 | return ('Student(' |
| ... | ... | @@ -57,17 +60,17 @@ class Student(Base): |
| 57 | 60 | # --------------------------------------------------------------------------- |
| 58 | 61 | class Answer(Base): |
| 59 | 62 | __tablename__ = 'answers' |
| 60 | - id = Column(Integer, primary_key=True) # auto_increment | |
| 61 | - ref = Column(String) | |
| 62 | - grade = Column(Float) | |
| 63 | - starttime = Column(String) | |
| 64 | - finishtime = Column(String) | |
| 65 | - student_id = Column(String, ForeignKey('students.id')) | |
| 66 | - topic_id = Column(String, ForeignKey('topics.id')) | |
| 67 | - | |
| 68 | - # --- | |
| 69 | - student = relationship('Student', back_populates='answers') | |
| 70 | - topic = relationship('Topic', back_populates='answers') | |
| 63 | + id: Mapped[int] = mapped_column(primary_key=True) # auto_increment | |
| 64 | + ref: Mapped[str] | |
| 65 | + grade: Mapped[float] | |
| 66 | + starttime: Mapped[str] | |
| 67 | + finishtime: Mapped[str] | |
| 68 | + student_id: Mapped[str] = mapped_column(String, ForeignKey('students.id')) | |
| 69 | + topic_id: Mapped[str] = mapped_column(String, ForeignKey('topics.id')) | |
| 70 | + | |
| 71 | + # --- FIXME | |
| 72 | + student: Mapped["Student"] = relationship('Student', back_populates='answers') | |
| 73 | + topic: Mapped["Topic"] = relationship('Topic', back_populates='answers') | |
| 71 | 74 | |
| 72 | 75 | def __repr__(self): |
| 73 | 76 | return ('Question(' |
| ... | ... | @@ -85,11 +88,11 @@ class Answer(Base): |
| 85 | 88 | # --------------------------------------------------------------------------- |
| 86 | 89 | class Topic(Base): |
| 87 | 90 | __tablename__ = 'topics' |
| 88 | - id = Column(String, primary_key=True) | |
| 91 | + id: Mapped[str] = mapped_column(primary_key=True) | |
| 89 | 92 | |
| 90 | - # --- | |
| 91 | - students = relationship('StudentTopic', back_populates='topic') | |
| 92 | - answers = relationship('Answer', back_populates='topic') | |
| 93 | + # --- FIXME | |
| 94 | + students: Mapped["StudentTopic"] = relationship('StudentTopic', back_populates='topic') | |
| 95 | + answers: Mapped["Answer"] = relationship('Answer', back_populates='topic') | |
| 93 | 96 | |
| 94 | 97 | def __repr__(self): |
| 95 | 98 | return f'Topic(id={self.id!r})' | ... | ... |