title: Set correct pandas.DataFrame datatypes from cx_Oracle default data types
body: <p>I have some oracle table with next field datatype:</p>
  <pre><code>ID|              NOT NULL NUMBER              
  VERSION|         NOT NULL NUMBER              
  STAT_ACTUAL|     NOT NULL NUMBER              
  REGION|          NOT NULL VARCHAR2(5 CHAR)    
  PARENTID|                 NUMBER              
  CITY|                 VARCHAR2(5 CHAR)    
  ...
  </code></pre>
  <p>and if I had trying  to add them from cx_Oracle  to pandas.DataFrame like that:</p>
  <pre><code>import pandas as pd
  from sqlalchemy import *
  
  conn = cx_Oracle.connect('datbs/datbs@host/serv')
  cursorr = conn.cursor()
  SQL  = &quot;select * from table where region = 1&quot;
  
  df= pd.read_sql_query(SQL, con=conn)
  </code></pre>
  <p>datatypes looks like:</p>
  <pre><code>ID                          int64
  VERSION                     int64
  STAT_ACTUAL                 int64
  REGION                     object
  PARENTID                    int64
  CITY                       object
  ...
  </code></pre>
  <p>So, all my oracle varchar2 (which looks in cx_Oracle as (<code>'REGION', &lt;class 'cx_Oracle.STRING'&gt;</code>)) are object in pandas.df!</p>
  <p>I tried to convert them by this:</p>
  <pre><code>def OutConverter(value):
      if value is None:
          return ''
      return value
  
  def VarToStr(cursor, name, defaultType, size, precision, scale):
      if defaultType in (cx_Oracle.STRING, cx_Oracle.OBJECT):
          return cursor.var(str, size, cursorr.arraysize, outconverter=OutConverter)
  
  conn.outputtypehandler = VarToStr
  </code></pre>
  <p>but result hasn't been taken...df.dtypes show object type again</p>
  <p>How to map oracle and cx_Oracle datatypes to pandas df?</p>