Skip to content

Commit 51ac1db

Browse files
authored
Support PyMysql with a version greater than 0.9.3 (#328)
1 parent 511b42c commit 51ac1db

File tree

3 files changed

+13
-6
lines changed

3 files changed

+13
-6
lines changed

pymysqlreplication/binlogstream.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import pymysql
44
import struct
5+
from distutils.version import LooseVersion
56

67
from pymysql.constants.COMMAND import COM_BINLOG_DUMP, COM_REGISTER_SLAVE
78
from pymysql.cursors import DictCursor
@@ -259,7 +260,7 @@ def _register_slave(self):
259260

260261
packet = self.report_slave.encoded(self.__server_id)
261262

262-
if pymysql.__version__ < "0.6":
263+
if pymysql.__version__ < LooseVersion("0.6"):
263264
self._stream_connection.wfile.write(packet)
264265
self._stream_connection.wfile.flush()
265266
self._stream_connection.read_packet()
@@ -407,7 +408,7 @@ def __connect_to_stream(self):
407408
# encoded_data
408409
prelude += gtid_set.encoded()
409410

410-
if pymysql.__version__ < "0.6":
411+
if pymysql.__version__ < LooseVersion("0.6"):
411412
self._stream_connection.wfile.write(prelude)
412413
self._stream_connection.wfile.flush()
413414
else:
@@ -424,7 +425,7 @@ def fetchone(self):
424425
self.__connect_to_ctl()
425426

426427
try:
427-
if pymysql.__version__ < "0.6":
428+
if pymysql.__version__ < LooseVersion("0.6"):
428429
pkt = self._stream_connection.read_packet()
429430
else:
430431
pkt = self._stream_connection._read_packet()

pymysqlreplication/row_event.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import json
77

88
from pymysql.util import byte2int
9-
from pymysql.charset import charset_to_encoding
9+
from pymysql.charset import charset_by_name
1010

1111
from .event import BinLogEvent
1212
from .exceptions import TableMetadataUnavailableError
@@ -212,10 +212,16 @@ def __read_fsp(self, column):
212212
return microsecond * (10 ** (6-column.fsp))
213213
return 0
214214

215+
@staticmethod
216+
def charset_to_encoding(name):
217+
charset = charset_by_name(name)
218+
return charset.encoding if charset else name
219+
215220
def __read_string(self, size, column):
216221
string = self.packet.read_length_coded_pascal_string(size)
217222
if column.character_set_name is not None:
218-
string = string.decode(charset_to_encoding(column.character_set_name))
223+
encoding = self.charset_to_encoding(column.character_set_name)
224+
string = string.decode(encoding)
219225
return string
220226

221227
def __read_bit(self, column):

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,5 @@ def run(self):
5050
"pymysqlreplication.tests"],
5151
cmdclass={"test": TestCommand},
5252
extras_require={'test': tests_require},
53-
install_requires=['pymysql'],
53+
install_requires=['pymysql>=0.6'],
5454
)

0 commit comments

Comments
 (0)