Год вне диапазона Cx_ Oracle Python - PullRequest
0 голосов
/ 24 апреля 2020

Приведенный ниже код обычно дает мне результаты запроса данных, кроме этого времени ...

def oracle(user, pwd, dsn, sql, columns):

    # Connection to databases
    con = cx_Oracle.connect(user=user, password=pwd, dsn=dsn, encoding="UTF-8")
    cur = con.cursor()

    # Check Connection
    print('Connected')

    # Create DF
    df = pd.DataFrame(cur.execute(sql).fetchall(), columns= columns , dtype = 'str') 

    print('Shape:', df.shape)

    return df

Ниже приведена ошибка.

ValueError                                Traceback (most recent call last)
<timed exec> in <module>

<timed exec> in oracle_aml(user, pwd, dsn, sql)

<timed exec> in oracle(user, pwd, dsn, sql, columns)

ValueError: year -7 is out of range

Вопрос: Как я могу преодолеть это предупреждение? Это говорит о том, что для некоторых столбцов даты значение = -7. Это связано с ошибкой в ​​DB.

Я подумал добавить следующее выражение, чтобы игнорировать типы столбцов, но это не очень полезно.

dtype = 'str'

Спасибо всем, кто помогает!

1 Ответ

0 голосов
/ 25 апреля 2020

Благодаря этой ссылке я смог решить мою проблему

Ниже приведен полный код, использованный (работал для меня)

import cx_Oracle
import datetime
import os
os.environ['NLS_DATE_FORMAT'] = 'YYYY-MM-DD HH24:MI:SS'


def DateTimeConverter(value):
    if value.startswith('9999'):
        return None
    return datetime.datetime.strptime(value, '%Y-%m-%d %H:%M:%S')


def OutputHandler(cursor, name, defaulttype, length, precision, scale):
    if defaulttype == cx_Oracle.DATETIME:
        return cursor.var(cx_Oracle.STRING, arraysize=cursor.arraysize, outconverter=DateTimeConverter)


def oracle(user, pwd, dsn, sql, columns):

    # Connection to databases
    con = cx_Oracle.connect(user=user, password=pwd, dsn=dsn, encoding="UTF-8")
    con.outputtypehandler = OutputHandler

    # Cursor allows Python code to execute PostgreSQL command in a database session
    cur = con.cursor()

    # Check Connection
    print('Connected')

    # Create DF
    df = pd.DataFrame(cur.execute(sql).fetchall(), columns= columns, dtype='object')[:]

    print('Shape:', df.shape)

    return df
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...