Mysql 熊猫:唐';t秀

Mysql 熊猫:唐';t秀,mysql,pandas,ssh,jupyter-notebook,Mysql,Pandas,Ssh,Jupyter Notebook,在python类中,我有通过SSH连接MySQL的代码: def executeQuery(self, query_string): print("connecting to database " + self.sql_main_database) with SSHTunnelForwarder( ( self.ssh_host, self.ssh_port), s

在python类中,我有通过SSH连接MySQL的代码:

def executeQuery(self, query_string):
        print("connecting to database " + self.sql_main_database)
        with SSHTunnelForwarder(
        (
            self.ssh_host,
            self.ssh_port),
        ssh_username = self.ssh_user,
        ssh_pkey     = self.pkey,
        remote_bind_address=(self.sql_hostname, self.sql_port)
        ) as tunnel:
            print("performing connection")
            conn = pymysql.connect(
            host="127.0.0.1",
            user=self.sql_username,
            password=self.sql_password,
            db=self.sql_main_database,
            port=tunnel.local_bind_port)
            query = query_string
            print("Querying")
            data = pd.read_sql_query(query, conn)
            print("Done!")
            conn.close()
            return data
代码运行良好,但当查询定义不好时,笔记本会冻结

然后,我尝试使用try/catch,代码的结尾如下

def executeQuery(self, query_string):
        try:
            with SSHTunnelForwarder(
                (
                    self.ssh_host,
                    self.ssh_port
                ),
                ssh_username = self.ssh_user,
                ssh_pkey     = self.pkey,
                remote_bind_address=(self.sql_hostname, self.sql_port)
                ) as tunnel:
                try:
                    conn  = pymysql.connect(
                        host  = "127.0.0.1",
                        user  = self.sql_username,
                        password = self.sql_password,
                        db    = self.sql_main_database,
                        port  = tunnel.local_bind_port
                    )
                    try:
                        query = query_string
                        data = pd.read_sql_query(query, conn)
                        return data
                    except DatabaseError as e:
                        Log.debug(self,str(e))
                        raise DatabaseError
                except pymysql.err.InternalError as e:
                    Log.debug(self, str(e))
                    raise DataError
        except Exception as e:
            Log.debug(self, "[Error]Setting up database: \'" + self.sql_main_database + "\'")
            raise DataError
问题是pd.read\u sql\u查询永远不会停止,因此永远不会调用except,尝试不会失败,并且过程将永远继续


超时解决方案是不可能的,因为查询没有定义执行时间,其中一些查询可以在处理过程中停留几个小时


我不知道如何修复它。

事实上,问题不在连接器上,只需要更新jupyter版本。

您可以在PyMySQL中使用超时:超时解决方案是不可能的,因为查询没有定义执行时间,其中一些查询可以在几个小时内继续处理。