Получите оператор вставки БД, чтобы сохранить регистр столбцов, заключив имена столбцов в кавычкиPython

Программы на Python
Ответить
Anonymous
 Получите оператор вставки БД, чтобы сохранить регистр столбцов, заключив имена столбцов в кавычки

Сообщение Anonymous »

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

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

"id_field","last_updated_date"
"123456",2021-08-07 16:26:45.299
DDL, создающий схему и таблицу Oracle:

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

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}")

Но получите: (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 ... olumn-name
Ответить

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

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

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

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

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