Ich habe einen Schüler , der Prüfungen eines bestimmten Faches abhält. Ein Thema kann mehrere Prüfungen haben, aber nur die neuesten Prüfungen werden berücksichtigt. Ein Student gilt als bestanden, wenn er die neueste Prüfung aller Themen bestanden hat. /p>
Die Sqlalchemy-Entitäten sind so geschrieben.
SELECT student_name,
subject_name,
exam_passed,
FROM (
SELECT student.name student_name,
subject.name subject_name,
exam.passed exam_passed,
max(exam.completed_at) completed_at,
FROM exam
JOIN student ON exam.student_idx = student.idx
JOIN subject ON exam.subject_idx = subject.idx
GROUP BY exam.student_idx, exam.subject_idx
)
< /code>
Dies wird in SQLalchemy mögen. Ich kann überprüfen, ob die von SQL-Alchemie gerenderte SQL korrekt ist. @classmethod
@latest_exams.inplace.expression
def latest_exams(cls):
stmt = (
select(Exam, func.max(Exam.completed_at))
.join(Student)
.group_by(Exam.student_idx, Exam.subject_idx)
)
subq = stmt.subquery()
return subq
< /code>
Ich kann mit Folgendem abfragen: < /p>
stmt = select(Student.latest_exams).join(Student).filter_by(name='Joe Bloggs')
with _Session() as s:
results = s.execute(stmt)
for result in results.scalars():
print(result)
< /code>
, aber die ausgeführte Anweisung gibt nur den Primärschlüssel zurück. Nach allem, was ich beurteilen kann, kann dies auf die Verwendung von Scalars
zurückzuführen sein, aber in anderen Fällen gibt Scalarars das ORM -Objekt zurück. Warum macht es das hier nicht?
Ich habe einen Schüler , der Prüfungen eines bestimmten Faches abhält. Ein Thema kann mehrere Prüfungen haben, aber nur die neuesten Prüfungen werden berücksichtigt. Ein Student gilt als bestanden, wenn er die neueste Prüfung aller Themen bestanden hat. /p> Die Sqlalchemy-Entitäten sind so geschrieben.[code]from sqlalchemy import select, func, ForeignKey, create_engine, Table, Column from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.orm import Mapped, mapped_column, relationship, sessionmaker, DeclarativeBase, registry
completed_at: Mapped[datetime] = mapped_column(default_factory=datetime.now) < /code> Ich habe eine SQL -Abfrage, die erfolgreich die neuesten Prüfungen erhält, die ein Schüler abgelegt hat. Sie können einen bestimmten Schülernamen mit einer Where [/code]-Klausel filtern.[code]SELECT student_name, subject_name, exam_passed, FROM ( SELECT student.name student_name, subject.name subject_name, exam.passed exam_passed, max(exam.completed_at) completed_at, FROM exam JOIN student ON exam.student_idx = student.idx JOIN subject ON exam.subject_idx = subject.idx GROUP BY exam.student_idx, exam.subject_idx ) < /code> Dies wird in SQLalchemy mögen. Ich kann überprüfen, ob die von SQL-Alchemie gerenderte SQL korrekt ist. @classmethod @latest_exams.inplace.expression def latest_exams(cls): stmt = ( select(Exam, func.max(Exam.completed_at)) .join(Student) .group_by(Exam.student_idx, Exam.subject_idx) ) subq = stmt.subquery() return subq < /code> Ich kann mit Folgendem abfragen: < /p> stmt = select(Student.latest_exams).join(Student).filter_by(name='Joe Bloggs')
with _Session() as s: results = s.execute(stmt)
for result in results.scalars(): print(result) < /code> , aber die ausgeführte Anweisung gibt nur den Primärschlüssel zurück. Nach allem, was ich beurteilen kann, kann dies auf die Verwendung von Scalars [/code] zurückzuführen sein, aber in anderen Fällen gibt Scalarars das ORM -Objekt zurück. Warum macht es das hier nicht?
Ich habe die folgende Zeichenfolge, die ich auflösen und vom frühesten zum spätesten Datum sortieren möchte:
$dates = '2010-11-05,2010-11-05,2010-11-06,2010-11-06,2010-11-07,2010-11-07,2010-11-08';...
Wir haben eine Tabellenstruktur wie folgt:
CREATE TABLE `client` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`)
);
Angenommen, ich habe das folgende Modell. Wir haben Studenten, die Prüfungen eines bestimmten Faches ablegen. Ein Thema kann mehrere Prüfungen haben, aber nur die neuesten Prüfungen werden...