Pandas не добавляет двойные кавычки в оператор вставки, вызывая проблемы в OraclePython

Программы на Python
Ответить
Anonymous
 Pandas не добавляет двойные кавычки в оператор вставки, вызывая проблемы в Oracle

Сообщение Anonymous »

Я пытаюсь прочитать файл CSV и записать его в таблицу базы данных Oracle.
Файл CSV выглядит следующим образом:

Код: Выделить всё

"id_field","last_updated_date"
"123456",2021-08-07 16:26:45.299
Схема и таблица Oracle были созданы с использованием этого DDL:

Код: Выделить всё

CREATE USER "my_schema" IDENTIFIED BY "Password123";
GRANT ALL PRIVILEGES TO "my_schema";

CREATE TABLE "my_schema"."my_table" (
"id_field" VARCHAR2(50 CHAR),
"last_updated_date" TIMESTAMP (6)
);
Код, который мне нужно загрузить из CSV:

Код: Выделить всё

import pandas as pd
from sqlalchemy import create_engine, inspect, quoted_name
from sqlalchemy.exc import SQLAlchemyError

csv_file_path = "./my_table.csv"
user_name = "my_schema"
table_name = "my_table"
database_url = f"oracle+oracledb://\"{user_name}\":Password123@**********:1521?service_name=*******"

if __name__ == "__main__":

try :
engine = create_engine(database_url, echo="debug")
inspector = inspect(engine)

df = pd.read_csv(csv_file_path)
columns = inspector.get_columns(quoted_name(table_name, True), quoted_name(user_name, True))

# Build dtype map
dtype_map = {}
for col in columns:
col_name = col["name"]
col_type = col["type"]
dtype_map[col_name] = col_type

df.to_sql(
name=quoted_name(table_name, True),
con=engine,
schema=quoted_name(user_name, True),
if_exists="append",
index=False,
dtype=dtype_map,
)
except SQLAlchemyError as e:
raise RuntimeError(f"SQLAlchemy error while loading CSV to '{table_name}': {e}")
except Exception as e:
raise RuntimeError(f"Unexpected error while loading CSV to '{table_name}': {e}")

Но я получаю следующую ошибку от oracle: '(oracledb.Exceptions.DatabaseError) ORA-00904: "LAST_UPDATED_DATE": неверный идентификатор\nСправка: https://docs.oracle.com/error-help/db/ora-00904/'
Я считаю, что это происходит потому, что, когда to_sql генерирует операторы вставки, он делает это без цитируя имена столбцов.

Код: Выделить всё

'INSERT INTO "my_schema"."my_table" (id_field, last_updated_date) VALUES (:id_field, :last_updated_date)'
и поскольку имена столбцов в oracle написаны строчными буквами, он жалуется.
Можно ли заставить оператор вставки сохранить регистр столбцов, заключив имена столбцов в кавычки.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -in-oracle
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»