我正在尝试将 sql 查询转换为 sqlalchemy 的语法,但我没有得到相同的结果。 sql 查询返回我需要的四个测试行,而 python 只返回两个。我的语法有问题吗?
SQL查询:
SELECT * FROM POW p
JOIN completed_course cc1 on p.student_id = cc1.student_id
JOIN term_course tc on cc1.term_course_id = tc.id
JOIN completed_course cc on tc.id = cc.term_course_id
LEFT JOIN specialization_course sc on tc.course_id = sc.course_id
AND sc.specialization_id = p.specialization_id
WHERE p.id = 1;
烧瓶 SQLAlchemy:
def get(self, pow_id):
try:
cc = aliased(CompletedCourse)
cc1 = aliased(CompletedCourse)
p = aliased(POW)
tc = aliased(TermCourse)
sc = aliased(SpecializationCourse)
results = p.query\
.join(cc, cc.student_id == p.student_id)\
.join(tc, tc.id == cc.term_course_id)\
.join(cc1, cc1.term_course_id == tc.id)\
.join(sc, and_(sc.course_id == tc.course_id, sc.specialization_id == p.specialization_id), isouter=True)\
.filter(p.id == pow_id)\
.all()
print(results)
return {}, 200
except Exception as e:
raise Exception("")
如果你想像下面的代码,你可以使用数据库连接:
conn = mysql.connect()
cursor =conn.cursor()
sql_query = """SELECT * FROM POW p
JOIN completed_course cc1 on p.student_id = cc1.student_id
JOIN term_course tc on cc1.term_course_id = tc.id
JOIN completed_course cc on tc.id = cc.term_course_id
LEFT JOIN specialization_course sc on tc.course_id = sc.course_id
AND sc.specialization_id = p.specialization_id
WHERE p.id = 1;"""
cursor.execute(sql_query)
result = cursor.fetchall()
sqlText = db.text(original_sql)
db.session.execute(sqlText)