ambiguous column error fails with C extensions

Issue #2553 resolved
Mike Bayer repo owner created an issue
from sqlalchemy import *

metadata = MetaData()

caso = Table('caso', metadata,
    Column('id', Integer, primary_key=True),

)
ca = caso.alias()
stmt = select([ca.c.id](caso.c.id,))

e = create_engine("sqlite://", echo='debug')
metadata.create_all(e)

e.execute(caso.insert(), {'id': 1}, {'id': 2})
row = e.execute(stmt).first()
row[caso.c.id](caso.c.id)



Traceback (most recent call last):
  File "test2.py", line 17, in <module>
    row[caso.c.id](caso.c.id)
TypeError: expected string or Unicode object, Column found

Comments (3)

  1. Mike Bayer reporter

    patch:

    diff -r 0c101f764d5ba0e86fa35cc2f8cea0f13e8fbc90 lib/sqlalchemy/cextension/resultproxy.c
    --- a/lib/sqlalchemy/cextension/resultproxy.c   Mon Aug 20 18:28:32 2012 -0400
    +++ b/lib/sqlalchemy/cextension/resultproxy.c   Wed Aug 22 02:52:54 2012 -0400
    @@ -301,7 +301,7 @@
                 if (exception == NULL)
                     return NULL;
    
    -            cstr_key = PyString_AsString(key);
    +            cstr_key = PyObject_AsString(key);
                 if (cstr_key == NULL)
                     return NULL;
    
    diff -r 0c101f764d5ba0e86fa35cc2f8cea0f13e8fbc90 test/sql/test_query.py
    --- a/test/sql/test_query.py    Mon Aug 20 18:28:32 2012 -0400
    +++ b/test/sql/test_query.py    Wed Aug 22 02:52:54 2012 -0400
    @@ -978,6 +978,17 @@
                 lambda: r['user_id']('user_id')
             )
    
    +    def test_ambiguous_column_by_col(self):
    +        users.insert().execute(user_id=1, user_name='john')
    +        ua = users.alias()
    +        row = select([ua.c.user_id](users.c.user_id,)).execute().first()
    +
    +        assert_raises_message(
    +            exc.InvalidRequestError,
    +            "Ambiguous column name",
    +            lambda: row[users.c.user_id](users.c.user_id)
    +        )
    +
         @testing.requires.subqueries
         def test_column_label_targeting(self):
             users.insert().execute(user_id=7, user_name='ed')
    
  2. Log in to comment