小编Mat*_*ren的帖子

SQLAlchemy别名混淆

我有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
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它在select和join条件下混淆了无别名表和别名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
Run Code Online (Sandbox Code Playgroud)

当我在两个表上使用别名时,它不会混淆它们,结果查询正是我想要的.问题是由于各种原因我不能在我加入的表上使用别名,这是由于应用程序设计中动态生成查询.

我正在使用SQLAlchemy 0.6.8,我试图升级到0.7.9,但我仍然遇到了这个问题.关于如何解决这个问题的任何想法?

sql alias sqlalchemy self-join

5
推荐指数
1
解决办法
726
查看次数

标签 统计

alias ×1

self-join ×1

sql ×1

sqlalchemy ×1