cx_ oracle python проблема: ORA-01008: не все переменные связаны - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь вставить в свою oracle таблицу из python, используя cx_ 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)

Любая помощь приветствуется!

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Вы можете выяснить это, используя функцию pandas.read_csv() с аргументом sep= ':' (или delimiter=':'), чтобы разделить каждую строку символами двоеточия:

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

, где rec - параметр типа list.

0 голосов
/ 27 мая 2020

Проблема заключается в вашем вызове читателя, вам нужно указать ему параметр разделителя:

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

В противном случае ваша строковая переменная представляет собой просто одну строку, а не кортеж значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...