Я не уверен, как выполнить массовую вставку в Oracle из Python 3, используя именованные переменные связывания, когда исходные данные находятся в Pandas Dataframe.Код ниже показывает мою попытку.С безымянными привязками это довольно просто, но ошибочно, поскольку порядок привязок должен быть таким же, как столбцы в Dataframe.
"Named pandas binds with cursor.executemany in cx_oracle, how ?"
import pandas as pd
import cx_Oracle
# create table t( a number, b varchar2 (20 char));
df = pd.DataFrame(data={'a': [1, 2], 'b': ["Dog", "Cat"]})
conn = cx_Oracle.connect('/@DB')
cur = conn.cursor()
# Bulk insert, numbered binds work
cur.execute("truncate table t")
cur.executemany("insert into t (a, b) values (:1, :2)", df.values.tolist())
print(pd.read_sql("select a, b from t", con=conn))
# Insert, named binds work
cur.execute("truncate table t")
cur.execute("insert into t (a, b) values (:cc, :dd)", dd="Donkey", cc=1)
print(pd.read_sql("select a, b from t", con=conn))
# Bulk insert, named binds do not work
cur.execute("truncate table t")
cur.executemany("insert into t (a, b) values (:cc, :dd)", dd=df['b'].values.tolist(), cc=df['a'].values.tolist())
# TypeError: Required argument 'parameters' (pos 2) not found
print(pd.read_sql("select a, b from t", con=conn))
#
conn.commit()
cur.close()
conn.close()
Нильс