Hello all,
I am building a grading system for students and got unexpected
performance problems. I am using composite key for marks, which refer
to students and subjects.
When I am creating a mark (for student_1 and subject_1), unnecessary
select operations are performed (select all marks for student_1 and
select all marks for subject_1).
Why these selects are generated and how to avoid them?
Thanks for the attention.
Here is the sample code:
mapper(Student, table_students, properties={
'marks': relation(Mark, cascade='all, delete-orphan',
backref='student')
})
mapper(Subject, table_subjects, properties={
'marks': relation(Mark, cascade='all, delete-orphan',
backref='subject')
})
mapper(Mark, table_marks)
[... skip ...]
mark = Mark()
s.save(mark)
mark.student = student_1
mark.subject = subject_1
mark.value = 5
s.flush()
Here is SQL output (shortened a bit for ease of reading):
SELECT * FROM marks WHERE 1 = marks.student_id <-----
unnecessary select
SELECT * FROM marks WHERE 1 = marks.subject_id <-----
unnecessary select
BEGIN
INSERT INTO marks (subject_id, student_id, value) VALUES (1, 1, 5)
COMMIT
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---