NoSuchColumnError: "Could not locate ... column 'anon_1._sa_polymorphic_on'" with polymorphic_on clause and joinedload with limit

Issue #2446 resolved
Former user created an issue

If you specify a polymorphic_on as an SQL expression instead of column with single table inheritance (at least) and attempt a joined load of a related collection with a limit clause, you hit:

sqlalchemy.exc.NoSuchColumnError: "Could not locate column in row for column 'anon_1._sa_polymorphic_on'"

Comments (4)

  1. Mike Bayer repo owner

    are you on 0.7.6? successful output:

    classics-MacBook-Pro:sqlalchemy classic$ python inherit_limit.py 
    2012-03-21 15:21:02,818 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("employees")
    2012-03-21 15:21:02,818 INFO sqlalchemy.engine.base.Engine ()
    2012-03-21 15:21:02,819 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("roles")
    2012-03-21 15:21:02,819 INFO sqlalchemy.engine.base.Engine ()
    2012-03-21 15:21:02,819 INFO sqlalchemy.engine.base.Engine 
    CREATE TABLE employees (
        employee_id INTEGER NOT NULL, 
        type VARCHAR(20) NOT NULL, 
        PRIMARY KEY (employee_id)
    )
    
    
    2012-03-21 15:21:02,819 INFO sqlalchemy.engine.base.Engine ()
    2012-03-21 15:21:02,820 INFO sqlalchemy.engine.base.Engine COMMIT
    2012-03-21 15:21:02,820 INFO sqlalchemy.engine.base.Engine 
    CREATE TABLE roles (
        employee_id INTEGER NOT NULL, 
        role VARCHAR(50) NOT NULL, 
        PRIMARY KEY (employee_id, role), 
        FOREIGN KEY(employee_id) REFERENCES employees (employee_id)
    )
    
    
    2012-03-21 15:21:02,820 INFO sqlalchemy.engine.base.Engine ()
    2012-03-21 15:21:02,820 INFO sqlalchemy.engine.base.Engine COMMIT
    2012-03-21 15:21:02,824 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
    2012-03-21 15:21:02,824 INFO sqlalchemy.engine.base.Engine INSERT INTO employees (employee_id, type) VALUES (?, ?)
    2012-03-21 15:21:02,824 INFO sqlalchemy.engine.base.Engine (1, 'M')
    2012-03-21 15:21:02,826 INFO sqlalchemy.engine.base.Engine SELECT anon_1.employees_employee_id AS anon_1_employees_employee_id, anon_1.employees_type AS anon_1_employees_type, anon_1._sa_polymorphic_on AS anon_1__sa_polymorphic_on, roles_1.employee_id AS roles_1_employee_id, roles_1.role AS roles_1_role 
    FROM (SELECT employees.employee_id AS employees_employee_id, employees.type AS employees_type, CASE employees.type WHEN ? THEN ? WHEN ? THEN ? END AS _sa_polymorphic_on 
    FROM employees
     LIMIT ? OFFSET ?) AS anon_1 LEFT OUTER JOIN roles AS roles_1 ON anon_1.employees_employee_id = roles_1.employee_id
    2012-03-21 15:21:02,826 INFO sqlalchemy.engine.base.Engine ('M', 'manager', 'E', 'employee', 10, 0)
    2012-03-21 15:21:02,827 INFO sqlalchemy.engine.base.Engine ROLLBACK
    2012-03-21 15:21:02,827 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("roles")
    2012-03-21 15:21:02,827 INFO sqlalchemy.engine.base.Engine ()
    2012-03-21 15:21:02,827 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("employees")
    2012-03-21 15:21:02,828 INFO sqlalchemy.engine.base.Engine ()
    2012-03-21 15:21:02,828 INFO sqlalchemy.engine.base.Engine 
    DROP TABLE roles
    2012-03-21 15:21:02,828 INFO sqlalchemy.engine.base.Engine ()
    2012-03-21 15:21:02,828 INFO sqlalchemy.engine.base.Engine COMMIT
    2012-03-21 15:21:02,828 INFO sqlalchemy.engine.base.Engine 
    DROP TABLE employees
    2012-03-21 15:21:02,828 INFO sqlalchemy.engine.base.Engine ()
    2012-03-21 15:21:02,829 INFO sqlalchemy.engine.base.Engine COMMIT
    
  2. Former user Account Deleted

    Wow, you fixed it before I even reported it... impressive. (No, I was on 0.7.5ish)

    Thanks.

  3. Log in to comment