From 68299cbd444d4ba1c837b9407faedb5dc42f9d16 Mon Sep 17 00:00:00 2001 From: Ben Trofatter Date: Mon, 18 Mar 2013 17:58:41 -0700 Subject: [PATCH] Added workaround for pymysql3 double wrapping ProgrammingErrors to pymysql dialect. Added workaround for pymysql3 return a bytes object when queried for isolation level. --- lib/sqlalchemy/dialects/mysql/base.py | 5 +++++ lib/sqlalchemy/dialects/mysql/pymysql.py | 12 ++++++++++++ test/sql/test_types.py | 12 +++++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py index 62598ad005..3720c4e623 100644 --- a/lib/sqlalchemy/dialects/mysql/base.py +++ b/lib/sqlalchemy/dialects/mysql/base.py @@ -1932,6 +1932,11 @@ class MySQLDialect(default.DefaultDialect): cursor.execute('SELECT @@tx_isolation') val = cursor.fetchone()[0] cursor.close() + # Py3K + #if isinstance(val, bytes): + # val = val.decode() + # Py2K + # end Py2K return val.upper().replace("-", " ") def do_commit(self, dbapi_connection): diff --git a/lib/sqlalchemy/dialects/mysql/pymysql.py b/lib/sqlalchemy/dialects/mysql/pymysql.py index d70e997f7e..25e2dadd3c 100644 --- a/lib/sqlalchemy/dialects/mysql/pymysql.py +++ b/lib/sqlalchemy/dialects/mysql/pymysql.py @@ -28,9 +28,21 @@ class MySQLDialect_pymysql(MySQLDialect_mysqldb): driver = 'pymysql' description_encoding = None + # Py3K + #supports_unicode_statements = True + # Py2K + # end Py2K @classmethod def dbapi(cls): return __import__('pymysql') + # Py3K + #def _extract_error_code(self, exception): + # if isinstance(exception.args[0], Exception): + # exception = exception.args[0] + # return exception.args[0] + # Py2K + # end Py2K + dialect = MySQLDialect_pymysql diff --git a/test/sql/test_types.py b/test/sql/test_types.py index fac22a205b..4bbfd96e82 100644 --- a/test/sql/test_types.py +++ b/test/sql/test_types.py @@ -699,6 +699,16 @@ class UnicodeTest(fixtures.TestBase): # end Py2K ) + elif testing.against('mysql+pymysql'): + eq_( + testing.db.dialect.returns_unicode_strings, + # Py3K + #True + # Py2K + False + # end Py2K + ) + else: expected = (testing.db.name, testing.db.driver) in \ ( @@ -709,7 +719,7 @@ class UnicodeTest(fixtures.TestBase): ('mysql', 'oursql'), ('mysql', 'zxjdbc'), ('mysql', 'mysqlconnector'), - ('mysql', 'pymysql'), + #('mysql', 'pymysql'), ('sqlite', 'pysqlite'), ('oracle', 'zxjdbc'), ('oracle', 'cx_oracle'), -- 2.47.2