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 | # third party libraries | 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 | class StudentTopic(Base): | 19 | class StudentTopic(Base): |
17 | __tablename__ = 'studenttopic' | 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 | def __repr__(self): | 30 | def __repr__(self): |
28 | return ('StudentTopic(' | 31 | return ('StudentTopic(' |
@@ -37,13 +40,13 @@ class StudentTopic(Base): | @@ -37,13 +40,13 @@ class StudentTopic(Base): | ||
37 | # --------------------------------------------------------------------------- | 40 | # --------------------------------------------------------------------------- |
38 | class Student(Base): | 41 | class Student(Base): |
39 | __tablename__ = 'students' | 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 | def __repr__(self): | 51 | def __repr__(self): |
49 | return ('Student(' | 52 | return ('Student(' |
@@ -57,17 +60,17 @@ class Student(Base): | @@ -57,17 +60,17 @@ class Student(Base): | ||
57 | # --------------------------------------------------------------------------- | 60 | # --------------------------------------------------------------------------- |
58 | class Answer(Base): | 61 | class Answer(Base): |
59 | __tablename__ = 'answers' | 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 | def __repr__(self): | 75 | def __repr__(self): |
73 | return ('Question(' | 76 | return ('Question(' |
@@ -85,11 +88,11 @@ class Answer(Base): | @@ -85,11 +88,11 @@ class Answer(Base): | ||
85 | # --------------------------------------------------------------------------- | 88 | # --------------------------------------------------------------------------- |
86 | class Topic(Base): | 89 | class Topic(Base): |
87 | __tablename__ = 'topics' | 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 | def __repr__(self): | 97 | def __repr__(self): |
95 | return f'Topic(id={self.id!r})' | 98 | return f'Topic(id={self.id!r})' |