Python 3.x 明确规定;从「;桌子
我目前有以下疑问:Python 3.x 明确规定;从「;桌子,python-3.x,sqlalchemy,Python 3.x,Sqlalchemy,我目前有以下疑问: query = self.session.query(Student, School).join( Person.student, aliased=True).join( Student.school, aliased=True).filter( Person.id == 1) 它编译成这个SQL SELECT student.id AS student_id, student.school_id AS student_school_id, stud
query = self.session.query(Student, School).join(
Person.student, aliased=True).join(
Student.school, aliased=True).filter(
Person.id == 1)
它编译成这个SQL
SELECT student.id AS student_id, student.school_id AS student_school_id, student.person_id AS student_person_id, school.id AS school_id, school.name AS school_name
FROM student, school, person JOIN student AS student_1 ON person.id = student_1.person_id JOIN school AS school_1 ON school_1.id = student_1.school_id
WHERE person.id = :id_1
我希望查询保持原样,但我希望from语句完全来自Person
模型。大概是
SELECT * FROM person JOIN ... WHERE person.id = :id_1
我认为带别名的kwarg把情况搞砸了。删除带别名的kwarg可以修复该行为,但我需要带别名的kwarg用于特殊用例。如何从“from”语句中删除
student
和school
表。到的aliased
参数。join
使用匿名别名,这意味着传递到会话的student
和school
表。query
是表的不同“实例”
from sqlalchemy.orm import aliased
aliased_student = aliased(Student)
aliased_school = aliased(School)
query = (
session.query(aliased_student, aliased_school)
.select_from(Person)
.join(aliased_student, Person.student)
.join(aliased_school, Student.school)
.filter(Person.id == 1))
在这里您可以看到,您可以告诉
.join
在加入关系时使用哪个别名。加入的别名
参数使用匿名别名,这意味着传递给会话的学生
和学校
。查询
是表的不同“实例”
from sqlalchemy.orm import aliased
aliased_student = aliased(Student)
aliased_school = aliased(School)
query = (
session.query(aliased_student, aliased_school)
.select_from(Person)
.join(aliased_student, Person.student)
.join(aliased_school, Student.school)
.filter(Person.id == 1))
在这里您可以看到,您可以告诉.join
在加入关系时要使用哪个别名