Pandas fügt der INSERT-Anweisung keine doppelten Anführungszeichen hinzu, was zu Problemen in Oracle führtPython

Python-Programme
Anonymous
 Pandas fügt der INSERT-Anweisung keine doppelten Anführungszeichen hinzu, was zu Problemen in Oracle führt

Post by Anonymous »

Ich lese aus einer CSV-Datei, die so aussieht:

Code: Select all

"id_field","last_updated_date"
"123456",2021-08-07 16:26:45.299
Und Erstellen eines Datenrahmens mit:

Code: Select all

df = pd.read_csv(file_path)
Ich erhalte Metadaten zu den Tabellenspalten und verwende diese, um eine Dtype-Map zu erstellen, die ich beim Schreiben in meine Oracle-Datenbanktabelle verwenden werde

Code: Select all

metadata = MetaData()
table = Table(
quoted_name(table_name, True),
metadata,
schema=quoted_name(self.schema, True),
autoload_with=self.engine
)

dtype_map = {}
for col in table.columns:
col_name = col.name
col_type = col.type
dtype_map[col_name] = col_type
Ich versuche dann, in meine Oracle-Tabelle zu schreiben mit:

Code: Select all

df.to_sql(
name=quoted_name(table_name, True),
con=self.engine,
schema=quoted_name(self.schema, True),
if_exists=if_exists,
index=False,
dtype=dtype_map,
)
wobei self.engine eine SQLalchemy-Engine ist.
Aber ich erhalte die folgende Fehlermeldung von Oracle: '(oracledb.Exceptions.DatabaseError) ORA-00904: "LAST_UPDATED_DATE": ungültiger Bezeichner\nHilfe: https://docs.oracle.com/error-help/db/ora-00904/'
Ich glaube, das liegt daran, dass to_sql beim Generieren von Einfügeanweisungen dies tut, ohne die Spaltennamen in Anführungszeichen zu setzen.

Code: Select all

'INSERT INTO "my_schema"."my_table" (id_field, last_updated_date) VALUES (:id_field, :last_updated_date)'
und weil meine Spaltennamen in Oracle Kleinbuchstaben sind, beschwert es sich. Hier ist meine Tabellen-DDL

Code: Select all

CREATE TABLE "my_schema"."my_table"
(    "id_field" VARCHAR2(50 CHAR),
"last_updated_date" TIMESTAMP (6)
)
TABLESPACE "USERS" ;
Ist es möglich, die Einfügeanweisung dazu zu bringen, die Spaltenschreibweise beizubehalten, indem die Spaltennamen in Anführungszeichen gesetzt werden?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post