On 6/20/14, 3:59 AM, Belegnar Dragon wrote: > Hello. > > SQLAlchemy 0.9.4 > > In this code > > def unidecode_column_name(inspector, table, column_info): > column_info['key'] = unidecode(column_info['name']).replace(u' ', > u'_') > > engine = create_engine("mssql+pyodbc://%s:%s@RTBD" % > (settings.RT_USER, settings.RT_PWD), echo = True) > metadata = MetaData(bind = engine) > metadata.reflect(engine, only = [u"Заказы",], listeners = > [('column_reflect', unidecode_column_name)]) > orders = metadata.tables[u'Заказы'] > class Order(object): > pass > mapper(Order, orders) > > sess = Session(engine) > q = sess.query(Order) > q.filter_by(Kod_zakazchika = u'F07301m').all() > > I've got the following error > > NoSuchColumnError Traceback (most recent call > last) > <ipython-input-2-83aa85e1bb5a> in <module>() > ----> 1 q.filter_by(Kod_zakazchika = u'F07301m').all() > > local/lib/python2.7/site-packages/sqlalchemy/orm/query.pyc in all(self) > 2290 > 2291 """ > -> 2292 return list(self) > 2293 > 2294 @_generative(_no_clauseelement_condition) > > local/lib/python2.7/site-packages/sqlalchemy/orm/loading.py in > instances(query, cursor, context) > 70 process[0](row, rows) > 71 elif single_entity: > ---> 72 rows = [process[0](row, None) for row in fetch] > 73 else: > 74 rows = [util.KeyedTuple([proc(row, None) for proc > in process], > > local/lib/python2.7/site-packages/sqlalchemy/orm/loading.py in > _instance(row, result) > 359 identitykey = ( > 360 identity_class, > --> 361 tuple([row[column] for column in > pk_cols]) > 362 ) > 363 > > local/lib/python2.7/site-packages/sqlalchemy/engine/result.pyc in > _key_fallback(self, key, raiseerr) > 330 raise exc.NoSuchColumnError( > 331 "Could not locate column in row for column > '%s'" % > --> 332 expression._string_or_unprintable(key)) > 333 else: > 334 return None > > 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. -- 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.