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]
--
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.