как сохранить pandas кадр в базу данных с помощью to_sql - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь сохранить фрейм данных в таблицу oracle, используя приведенный ниже код, данные будут успешно вставлены, если я пропущу dtype={'PN': types.VARCHAR}

merged.to_sql('table1', conn, if_exists='append', index=False, dtype={'PN': types.VARCHAR})

, иначе выдает

sqlalchemy.exc.OperationalError: (cx_Oracle.OperationalError) ORA-00604: error occurred at recursive SQL level 1
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at line 13
ORA-00906: missing left parenthesis
[SQL: 
CREATE TABLE tabl1(
    "PN" VARCHAR, 
    "DT" DATE, 
    "COL1" FLOAT, 
    "COL2" NUMBER(19), 
    "COL3" NUMBER(19), 
    "COL4" FLOAT, 
    "COL5" FLOAT, 
    "COL6" FLOAT
)

]

1 Ответ

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

Oracle ожидает длину столбца varchar в инструкции DDL «Создать таблицу». По предложению Горда, указание значения от 1 до 255 в скобках решит проблему. Вы можете попробовать dtype = {'PN': types.VARCHAR (255)}. Если вы хотите узнать, что происходит в базе данных, я воспроизвел проблему в dbfiddle - Oracle 18 c Express edition, которую вы можете проверить. https://dbfiddle.uk/?rdbms=oracle_18&fiddle=9362757cfcb1cfc3052425190367d3d8

Я бы не рекомендовал использовать varchar для хранения данных alphanumeri c по следующим причинам:

  1. Семантика сравнения Используйте тип данных CHAR, когда вам требуется совместимость ANSI в семантике сравнения, то есть, когда конечные пробелы не важны при сравнении строк. Используйте VARCHAR2, когда конечные пробелы важны при сравнении строк.
  2. Использование пространства Для более эффективного хранения данных используйте тип данных VARCHAR2. Пустые площадки типа CHAR и хранят конечные пробелы до фиксированной длины столбца для всех значений столбцов, в то время как тип данных VARCHAR2 не заполняет пустые поля и не сохраняет конечные пробелы для значений столбцов.
  3. Совместимость в будущем CHAR и VARCHAR2 типы данных есть и всегда будут полностью поддерживаться. В настоящее время тип данных VARCHAR автоматически соответствует типу данных VARCHAR2 и зарезервирован для будущего использования.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...