如何将数据框插入 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
我有以下数据框
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