我对 SQLAlchemy 和别名有疑问。我正在尝试对一个名为 Task 的表进行自联接,但 SQLAlchemy 将我的别名表与非别名表混淆了。
我的查询要复杂得多,但这是一个简化版本:
baseTask = aliased(model.Task)
query = model.session.query(model.Task.name)\
.select_from(baseTask)\
.join((model.Task, model.Task.taskid==baseTask.taskid))
The resulting query looks like this:
SELECT task_1.name
FROM task AS task_1 INNER JOIN task ON task_1.taskid = task_1.taskid
正如您所看到的,它在选择和连接条件中都将未别名表与别名 task_1 混淆了。
通过在两个表上使用别名,它可以工作:
baseTask = aliased(model.Task)
task = aliased(model.Task)
query = model.session.query(task.name)\
.select_from(baseTask)\
.join((task, task.taskid==baseTask.taskid))
This gives the desired result:
SELECT task_1.name
FROM task AS task_2 INNER JOIN task AS task_1 ON task_1.taskid = task_2.taskid
当我在两个表上使用别名时,它不会混淆它们,并且结果查询正是我想要的。问题是由于各种原因我不能在我加入的表上使用别名,这是由于动态生成查询的应用程序设计。
我正在使用 SQLAlchemy 0.6.8,我尝试升级到 0.7.9,但我仍然遇到这个问题。关于如何解决这个问题的任何想法?