summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2014-07-14 18:54:23 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2014-07-14 18:57:25 -0400
commita81d3a23c0052ae97e7cd05f6a6a6de5902164be (patch)
tree04c174fe7c80ea477c4b59a6bdc13fedd78da72a
parent8be54fe1de23e983de97dcfaf43c173704bb6fa4 (diff)
downloadsqlalchemy-a81d3a23c0052ae97e7cd05f6a6a6de5902164be.tar.gz
- In the SQL Server pyodbc dialect, repaired the implementation
for the ``description_encoding`` dialect parameter, which when not explicitly set was preventing cursor.description from being parsed correctly in the case of result sets that contained names in alternate encodings. This parameter shouldn't be needed going forward. fixes #3091 Conflicts: test/sql/test_unicode.py
-rw-r--r--doc/build/changelog/changelog_08.rst12
-rw-r--r--lib/sqlalchemy/dialects/mssql/pyodbc.py3
-rw-r--r--test/sql/test_unicode.py23
3 files changed, 37 insertions, 1 deletions
diff --git a/doc/build/changelog/changelog_08.rst b/doc/build/changelog/changelog_08.rst
index 6ef185b72..2d5ea0cbf 100644
--- a/doc/build/changelog/changelog_08.rst
+++ b/doc/build/changelog/changelog_08.rst
@@ -12,6 +12,18 @@
:version: 0.8.7
.. change::
+ :tags: bug, mssql
+ :versions: 1.0.0, 0.9.7
+ :tickets: 3091
+
+ In the SQL Server pyodbc dialect, repaired the implementation
+ for the ``description_encoding`` dialect parameter, which when
+ not explicitly set was preventing cursor.description from
+ being parsed correctly in the case of result sets that
+ contained names in alternate encodings. This parameter
+ shouldn't be needed going forward.
+
+ .. change::
:tags: bug, sql
:versions: 1.0.0, 0.9.7
:tickets: 3124
diff --git a/lib/sqlalchemy/dialects/mssql/pyodbc.py b/lib/sqlalchemy/dialects/mssql/pyodbc.py
index 6d5c8c00d..1a17f5ecc 100644
--- a/lib/sqlalchemy/dialects/mssql/pyodbc.py
+++ b/lib/sqlalchemy/dialects/mssql/pyodbc.py
@@ -249,8 +249,9 @@ class MSDialect_pyodbc(PyODBCConnector, MSDialect):
)
def __init__(self, description_encoding=None, **params):
+ if 'description_encoding' in params:
+ self.description_encoding = params.pop('description_encoding')
super(MSDialect_pyodbc, self).__init__(**params)
- self.description_encoding = description_encoding
self.use_scope_identity = self.use_scope_identity and \
self.dbapi and \
hasattr(self.dbapi.Cursor, 'nextset')
diff --git a/test/sql/test_unicode.py b/test/sql/test_unicode.py
index 8cd9fdc27..4cf822202 100644
--- a/test/sql/test_unicode.py
+++ b/test/sql/test_unicode.py
@@ -86,6 +86,29 @@ class UnicodeSchemaTest(fixtures.TestBase):
assert t2.select().execute().fetchall() == [(1, 1)]
assert t3.select().execute().fetchall() == [(1, 5, 1, 1)]
+ def test_col_targeting(self):
+ t1.insert().execute({u'méil': 1, u'\u6e2c\u8a66': 5})
+ t2.insert().execute({u'a': 1, u'b': 1})
+ t3.insert().execute({u'\u6e2c\u8a66_id': 1,
+ u'unitable1_\u6e2c\u8a66': 5,
+ u'Unitéble2_b': 1,
+ u'\u6e2c\u8a66_self': 1})
+
+ row = t1.select().execute().first()
+ eq_(row[t1.c[u'méil']], 1)
+ eq_(row[t1.c[u'\u6e2c\u8a66']], 5)
+
+ row = t2.select().execute().first()
+ eq_(row[t2.c[u'a']], 1)
+ eq_(row[t2.c[u'b']], 1)
+
+ row = t3.select().execute().first()
+ eq_(row[t3.c[u'\u6e2c\u8a66_id']], 1)
+ eq_(row[t3.c[u'unitable1_\u6e2c\u8a66']], 5)
+ eq_(row[t3.c[u'Unitéble2_b']], 1)
+ eq_(row[t3.c[u'\u6e2c\u8a66_self']], 1)
+
+
@testing.skip_if(lambda: util.pypy,
"pypy/sqlite3 reports unicode cursor.description "
"incorrectly pre 2.2, workaround applied in 0.9")