On 6/20/14, 12:14 PM, Mike Bayer wrote: > On 6/20/14, 7:32 AM, Mike Bayer wrote: >> NoSuchColumnError: "Could not locate column in row for column >> '\\u0417\\u0430\\u043a\\u0430\\u0437\\u044b.\\u041d\\u043e\\u043c\\u0435\\u0440 >> \\u0437\\u0430\\u043a\\u0430\\u0437\\u0430'" >> >> The problem is i can't really debug this error because it isn't clear >> what should be in pk_cols >> >> Previously in orm/loading.py there is a string >> pk_cols = mapper.primary_key # line number 250 >> >> So, pk_cols is a list of Column() objects. >> row is a list of values from query >> Surely, [row[column] for column in pk_cols] raises error, because >> column is a Column() object and can't be index for row. But i can't >> imagine how this code may work. Is this a bug? >> the ResultProxy contains translation logic that receives Column objects >> and locates the data by name. This is documented at >> http://docs.sqlalchemy.org/en/rel_0_9/core/tutorial.html#selecting and >> is the primary method by which the ORM relates mapped columns to result >> sets. >> >> In this case the issue is most likely yet another pyodbc + unicode >> encoding issue, of which there are many, and often there's no way to >> work around. Need to know 1. OS platform 2. FreeTDS version 3. UnixODBC >> or iODBC (and what version) 4. pyodbc version 5. SQL Server version. I >> can try to test but often these unicode issues aren't easy to resolve >> (have you tried pymssql? ). thanks. > good news, I can reproduce this, and on my end at least it needs the > so-called "description_encoding" workaround. We may have to revisit > the defaults on this parameter for modern versions of Pyodbc. The test > below produces your error without the param, resolves with it. Please > try this out on your create_engine(), thanks. > > #! coding: utf-8 > > from sqlalchemy import * > > engine = create_engine("mssql+pyodbc://scott:tiger@ms_2008", echo=True, > description_encoding='utf8') > > colname = u'Заказ.Номер заказа' > > m = MetaData() > t = Table(u"Заказы", m, Column(colname, String(30), key='somecol')) > > m.drop_all(engine) > m.create_all(engine) > > engine.execute(t.insert().values(somecol='some value')) > result = engine.execute(t.select().where(t.c.somecol == 'some value')) > row = result.fetchone() > print row[t.c.somecol] yeah this is the workaround for now, but totally this is a bug back to 0.8 and further, should be backported for 0.8, 0.9 and 1.0 in https://bitbucket.org/zzzeek/sqlalchemy/issue/3091/update-description_encoding-for-pyodbc. Two different issues located.
-- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.