From 6efad7dfc6da0d54bb89809b12bacdf62d0169fd Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 12 Mar 2010 16:19:41 -0500 Subject: [PATCH] oursql doesn't like the cursor being reused without fetch being finished --- lib/sqlalchemy/engine/default.py | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py index cfab01dc42..8222c93cd4 100644 --- a/lib/sqlalchemy/engine/default.py +++ b/lib/sqlalchemy/engine/default.py @@ -137,7 +137,6 @@ class DefaultDialect(base.Dialect): self.returns_unicode_strings = self._check_unicode_returns(connection) def _check_unicode_returns(self, connection): - cursor = connection.connection.cursor() # Py2K if self.supports_unicode_statements: cast_to = unicode @@ -147,24 +146,27 @@ class DefaultDialect(base.Dialect): # Py3K #cast_to = str def check_unicode(type_): - cursor.execute( - cast_to( - expression.select( - [expression.cast( - expression.literal_column("'test unicode returns'"), type_) - ]).compile(dialect=self) + cursor = connection.connection.cursor() + try: + cursor.execute( + cast_to( + expression.select( + [expression.cast( + expression.literal_column("'test unicode returns'"), type_) + ]).compile(dialect=self) + ) ) - ) - - row = cursor.fetchone() - return isinstance(row[0], unicode) - + row = cursor.fetchone() + + return isinstance(row[0], unicode) + finally: + cursor.close() + # detect plain VARCHAR unicode_for_varchar = check_unicode(sqltypes.VARCHAR(60)) # detect if there's an NVARCHAR type with different behavior available unicode_for_unicode = check_unicode(sqltypes.Unicode(60)) - cursor.close() if unicode_for_unicode and not unicode_for_varchar: return "conditional" -- 2.47.3