【发布时间】:2023-03-13 12:29:01
【问题描述】:
当源数据位于 Pandas Dataframe 中时,我不确定如何使用命名绑定变量从 Python 3 批量插入到 Oracle。下面的代码显示了我的尝试。使用未命名的绑定,这很容易,但容易出错,因为绑定的顺序需要与 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()
尼尔斯
【问题讨论】:
标签: python-3.x pandas dataframe cx-oracle