У меня есть таблица oracle со следующим типом данных поля:
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)
...
, и если бы я пытался добавить их из cx_ Oracle в pandas .DataFrame, например:
import pandas as pd
from sqlalchemy import *
conn = cx_Oracle.connect('datbs/datbs@host/serv')
cursorr = conn.cursor()
SQL = "select * from table where region = 1"
df= pd.read_sql_query(SQL, con=conn)
типы данных выглядят так:
ID int64
VERSION int64
STAT_ACTUAL int64
REGION object
PARENTID int64
CITY object
...
Итак, все мои oracle varchar2 (которые выглядят в cx_ Oracle как ('REGION', <class 'cx_Oracle.STRING'>
)) являются объектами в pandas .df!
Я пытался преобразовать их следующим образом:
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
, но результат не был получен ... df.dtypes снова показывают тип объекта
Как отобразить oracle и cx_ Oracle типы данных до pandas df?