Файл уже открыт. open
принимает строковое имя файла и создает объект открытого файла, но вам не нужно это делать, потому что объекты в request.files
уже являются открытыми файлоподобными объектами.
portfolios = csv.DictReader(request.files['portfolios'])
Ваш запрос очень близок. Вы должны использовать следующее, которое включает в себя subject
в конечном списке выбора:
select u.name, u.subject, u.marks
from student s
unpivot
(
marks
for subject in (Maths, Science, English)
) u;
Вы также можете попробовать стандартный метод sql un-pivoting, используя последовательность логики со следующим кодом. Следующий код имеет 3 шага:
select *
from
(
select name, subject,
case subject
when 'Maths' then maths
when 'Science' then science
when 'English' then english
end as Marks
from studentmarks
Cross Join (values('Maths'),('Science'),('English')) AS Subjct(Subject)
)as D
where marks is not null;