【问题标题】:cx_oracle python issue : ORA-01008: not all variables boundcx_oracle python 问题:ORA-01008:并非所有变量都绑定
【发布时间】:2020-09-14 09:46:48
【问题描述】:

我正在尝试使用 cx_oracle 从 python 插入我的 oracle 表,但出现以下错误: cx_Oracle.DatabaseError: ORA-01008: 并非所有变量都绑定

my input file (test.log) has below content:
123:ABC:676:101:1014
131:BCD:668:110:1103
155:ABE:663:110:1107

conn = cx_Oracle.connect(user='user', password='pwd', dsn='localhost:1521/mydb')
reader = csv.reader(open("C:\\test.log", "r"))
rec = []
curs=conn.cursor()
for line in reader:
    rec.append(line)

curs.executemany("insert into MY_DB.DEPTTABLE values (:0, :1, :2, :3, :4)", rec)

感谢任何帮助!

【问题讨论】:

  • 如果 rec 不包含 5 元组(或等效序列)的列表,您将收到此错误。您需要显示rec 的内容是什么。

标签: python python-3.x pandas oracle cx-oracle


【解决方案1】:

您可以通过使用带有sep= ':'(或delimiter=':')参数的pandas.read_csv()函数来计算它,以便用冒号字符分隔每一行:

import pandas as pd
import cx_Oracle
conn = cx_Oracle.connect(user='user', password='pwd', dsn='localhost:1521/mydb')
curs=conn.cursor()
df = pd.read_csv(r'C:\\test.log',sep= ':',header=None) #to start from the top(first) row 

rec = df.astype(str).values.tolist()

for i in range(len(rec)):
    curs.prepare('INSERT INTO MY_DB.DEPTTABLE VALUES(:0, :1, :2, :3, :4)')
    curs.executemany(None,([rec[i]]))

conn.commit()
conn.close

其中reclist 类型参数。

【讨论】:

    【解决方案2】:

    问题在于您的阅读器调用,您需要为其提供分隔符参数:

    reader = csv.reader(open("C:\\test.log", "r"), delimiter=':')
    

    否则,您的 line 变量只是一个字符串,而不是值的元组。

    【讨论】:

    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 2011-09-22
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 2014-01-29
    相关资源
    最近更新 更多