models.py
3.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
'''
SQLAlchemy ORM
The classes below correspond to database tables
'''
from sqlalchemy import Column, ForeignKey, Integer, Float, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
# ============================================================================
# Declare ORM
Base = declarative_base()
# ----------------------------------------------------------------------------
class Student(Base):
'''Student table'''
__tablename__ = 'students'
id = Column(String, primary_key=True)
name = Column(String)
password = Column(String)
# ---
tests = relationship('Test', back_populates='student')
def __str__(self):
return (f'Student:\n'
f' id: "{self.id}"\n'
f' name: "{self.name}"\n'
f' password: "{self.password}"\n')
# ----------------------------------------------------------------------------
class Test(Base):
'''Test table'''
__tablename__ = 'tests'
id = Column(Integer, primary_key=True) # auto_increment
ref = Column(String)
title = Column(String)
grade = Column(Float)
state = Column(String) # ACTIVE, FINISHED, QUIT, NULL
comment = Column(String)
starttime = Column(String)
finishtime = Column(String)
filename = Column(String)
student_id = Column(String, ForeignKey('students.id'))
# ---
student = relationship('Student', back_populates='tests')
questions = relationship('Question', back_populates='test')
def __str__(self):
return (f'Test:\n'
f' id: {self.id}\n'
f' ref: "{self.ref}"\n'
f' title: "{self.title}"\n'
f' grade: {self.grade}\n'
f' state: "{self.state}"\n'
f' comment: "{self.comment}"\n'
f' starttime: "{self.starttime}"\n'
f' finishtime: "{self.finishtime}"\n'
f' filename: "{self.filename}"\n'
f' student_id: "{self.student_id}"\n')
# ---------------------------------------------------------------------------
class Question(Base):
'''Question table'''
__tablename__ = 'questions'
id = Column(Integer, primary_key=True) # auto_increment
number = Column(Integer) # question number (ref may be not be unique)
ref = Column(String)
grade = Column(Float)
comment = Column(String)
starttime = Column(String)
finishtime = Column(String)
test_id = Column(String, ForeignKey('tests.id'))
# ---
test = relationship('Test', back_populates='questions')
def __str__(self):
return (f'Question:\n'
f' id: {self.id}\n'
f' number: {self.number}\n'
f' ref: "{self.ref}"\n'
f' grade: {self.grade}\n'
f' comment: "{self.comment}"\n'
f' starttime: "{self.starttime}"\n'
f' finishtime: "{self.finishtime}"\n'
f' test_id: "{self.test_id}"\n')