pymysqlを使用してinceptionを接続する解決策

2933 ワード

最近py 3.5とdjangoを組み合わせてinceptionに基づいてSQL監査プラットフォームを開発しました.開発中にinceptionはmysqldbライブラリをサポートしているがpymysqlライブラリをサポートしていないことが判明し、mysqldbライブラリはpy 3.5と互換性がない.pymysql接続inceptionを直接使用して次のエラーを報告します.
ValueError: invalid literal for int() with base 10: 'Inception2'

pymysqlソースコードを検索connections.pyファイルを変更する
1107行が見つかりました
    def _request_authentication(self):
        # https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::HandshakeResponse
        if int(self.server_version.split('.', 1)[0]) >= 5:
            self.client_flag |= CLIENT.MULTI_RESULTS

次のように変更
    def _request_authentication(self):
        # https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::HandshakeResponse
        try:
            if int(self.server_version.split('.', 1)[0]) >= 5:
                self.client_flag |= CLIENT.MULTI_RESULTS
        except:
            if self.server_version.split('.', 1)[0] == 'Inception2':
                self.client_flag |= CLIENT.MULTI_RESULTS

pymysqlソースコードを検索cursors.pyファイルを変更する
346行が見つかりました
  if self._result and (self._result.has_next or not self._result.warning_count):
        return

次のように変更
if self._result:
   return

実測はinceptionを正常に接続し、関連結果を返すことができます.