如何将数据框插入 oracle table illegal/variable oracle

How do I insert a dataframe to an oracle table illegal/variable oracle

我有以下数据框

df2 = {names: [PEPE, LUIS], id: [1,2], stages: [0,1], ord: [3, 2]}

但这些是必填字段,table 要插入,您有更多字段,允许空值。

而数据框相当于 table

中的这些字段
df2 = {labels= :1, id= :2, stages= :3, ord= :4}

table

CREATE TABLE customer_prf
(
  names      VARCHAR2(80) NOT NULL, 
  label      VARCHAR2(80) NOT NULL,
  type       VARCHAR2(80) NOT NULL,
  type_flag  INT,
  type_flag2 INT,
  conc       VARCHAR2(80), 
  id         INT NOT NULL,
  n_stage    INT NOT NULL,
  ctry       INT NOT NULL,
  "order"    INT NOT NULL
);

你是如何设法从数据中插入数据的,其中插入的值之前已经在查询字符串中定义过,我做错了,ora-01036 发给我的。此外,id 值会自动递增吗?

我的代码

import cx_Oracle
import pandas as pd

...
df2.to_dict(orient='records')
print(df2)

conn = cx_Oracle.connect(connection)
cur = conn.cursor()
id = 0
insert_qry = cur.execute("insert into customer_prf values(
'references',
:1,
'text',
'',
'',
:2,
:3,
2,
:4)"
   cursor.prepare(insert)

你会怎么插入它

您可以使用 df2.values.tolist 来获取参数列表,并使用如下代码在数据框中插入值:

import pandas as pd
import cx_Oracle
conn = cx_Oracle.connect('un/pwd@host:port/dbname')

try:
    cursor = conn.cursor()
    df2 = pd.DataFrame({'names':['Pepe','Luis'], 'stages': [0,1], 'order': [3, 2]}) 
    col_list = df2.values.tolist()

    cursor.prepare("INSERT INTO customer_prf(names,label,type,id,n_stage,ctry,\"order\") VALUES(:1,'references','text',seq_customer.nextval,:2,2,:3)")
    cursor.executemany(None,col_list)
    print("executed!")
except Exception as err:
    print('Error', err)
else:
    conn.commit()

哪里

  • 更喜欢使用 executemany 而不是 execute 表演者

  • 创建一个序列 (seq_customer) 并添加到您的值列表 (seq_customer.nextval) 使用数据库版本 11g,如果您的数据库是版本 12c+,则可以在 create table ddl 语句中识别 ID 列(例如 during table创作)如

    ID INT generated always as identity primary key