From 6cfffa42e8b728a2717bba90ed91a9b45cf751eb Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Tue, 19 Oct 2021 13:02:53 +0900 Subject: [PATCH 1/3] set_character_set() sends "SET NAMES" always. --- MySQLdb/connections.py | 40 +++++++++++----------------------------- 1 file changed, 11 insertions(+), 29 deletions(-) diff --git a/MySQLdb/connections.py b/MySQLdb/connections.py index 31f131db..d4bb6886 100644 --- a/MySQLdb/connections.py +++ b/MySQLdb/connections.py @@ -200,10 +200,6 @@ class object, used to create cursors (keyword only) ) self.encoding = "ascii" # overridden in set_character_set() - db = proxy(self) - - def unicode_literal(u, dummy=None): - return db.string_literal(u.encode(db.encoding)) if not charset: charset = self.character_set_name() @@ -227,7 +223,11 @@ def unicode_literal(u, dummy=None): # MySQL may return JSON with charset==binary. self.converter[FIELD_TYPE.JSON] = str + db = proxy(self) + def unicode_literal(u, dummy=None): + return db.string_literal(u.encode(db.encoding)) self.encoders[str] = unicode_literal + self._transactional = self.server_capabilities & CLIENT.TRANSACTIONS if self._transactional: if autocommit is not None: @@ -300,32 +300,14 @@ def begin(self): """ self.query(b"BEGIN") - if not hasattr(_mysql.connection, "warning_count"): - - def warning_count(self): - """Return the number of warnings generated from the - last query. This is derived from the info() method.""" - info = self.info() - if info: - return int(info.split()[-1]) - else: - return 0 - def set_character_set(self, charset): - """Set the connection character set to charset. The character - set can only be changed in MySQL-4.1 and newer. If you try - to change the character set from the current value in an - older version, NotSupportedError will be raised.""" - py_charset = _charset_to_encoding.get(charset, charset) - if self.character_set_name() != charset: - try: - super().set_character_set(charset) - except AttributeError: - if self._server_version < (4, 1): - raise NotSupportedError("server is too old to set charset") - self.query("SET NAMES %s" % charset) - self.store_result() - self.encoding = py_charset + """Set the connection character set to charset.""" + try: + super().set_character_set(charset) + except AttributeError: + self.query("SET NAMES %s" % charset) + self.store_result() + self.encoding = _charset_to_encoding.get(charset, charset) def set_sql_mode(self, sql_mode): """Set the connection sql_mode. See MySQL documentation for From b275e6ab13871741a6524803877764a9c896c860 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Tue, 19 Oct 2021 13:05:20 +0900 Subject: [PATCH 2/3] cleanup --- MySQLdb/connections.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/MySQLdb/connections.py b/MySQLdb/connections.py index d4bb6886..256be395 100644 --- a/MySQLdb/connections.py +++ b/MySQLdb/connections.py @@ -302,11 +302,7 @@ def begin(self): def set_character_set(self, charset): """Set the connection character set to charset.""" - try: - super().set_character_set(charset) - except AttributeError: - self.query("SET NAMES %s" % charset) - self.store_result() + super().set_character_set(charset) self.encoding = _charset_to_encoding.get(charset, charset) def set_sql_mode(self, sql_mode): From 3db340e8e972e1f37c8b1ae4da87e6ce73521fed Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Tue, 19 Oct 2021 13:06:34 +0900 Subject: [PATCH 3/3] reformat --- MySQLdb/connections.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/MySQLdb/connections.py b/MySQLdb/connections.py index 256be395..482b12f0 100644 --- a/MySQLdb/connections.py +++ b/MySQLdb/connections.py @@ -224,8 +224,10 @@ class object, used to create cursors (keyword only) self.converter[FIELD_TYPE.JSON] = str db = proxy(self) + def unicode_literal(u, dummy=None): return db.string_literal(u.encode(db.encoding)) + self.encoders[str] = unicode_literal self._transactional = self.server_capabilities & CLIENT.TRANSACTIONS