cx_Oracle.DatabaseError:ORA-01036:非法的变量名称/编号

问题描述 投票:0回答:1

我正在尝试将一个csv文件加载到oracle数据库中,并遇到此错误:

cx_Oracle.DatabaseError:ORA-01036:非法的变量名称/编号

您能不能帮助您了解根本原因并可能解决此问题?

def main():
    ConStr = 'UserName/PWD@END_POINT'
    con = cx_Oracle.connect(ConStr)
    cur = con.cursor()
    with open('Persons.csv','r') as file:
                    read_csv = csv.reader(file,delimiter= '|')
                    sql = "insert into Persons (PERSONID,LASTNAME,FIRSTNAME,ADDRESS,CITY) values (:1,:2,:3,:4,:5)"
                    for lines in read_csv :
                            print(lines)
                            cur.executemany(sql,lines)
    cur.close()
    con.commit()
    con.close();

我的csv文件如下所示:

PERSONID|LASTNAME|FIRSTNAME|ADDRESS|CITY
001|abc|def|ghi|jkl
002|opq|rst|uvw|xyz
python-2.7 csv sql-insert cx-oracle oracledb
1个回答
0
投票

参数元组或映射应在序列lines中找到,该序列是executemany方法的第二个参数,而标题的字符串,如PERSONIDLASTNAME等。返回该参数的每一步。

未测试Python 2,但请尝试以下适用于Phyton 3的代码:

import pandas as pd
import cx_Oracle

ConStr = 'UserName/PWD@END_POINT:PORT/SERVICE_NAME'

con=cx_Oracle.connect(ConStr)
cur=con.cursor()

fl=r'C:\\Documents\\csv\\Persons.csv'

sql = "insert into Persons (PERSONID,LASTNAME,FIRSTNAME,ADDRESS,CITY) values (:1,:2,:3,:4,:5)"

read_csv = pd.read_csv(fl,delimiter= '|')
df_list = read_csv.values.tolist()

for lines, r in read_csv.iterrows():
        cur.execute(sql,r)

cur.close()

con.commit()
con.close();

其中

for lines, r in read_csv.iterrows():
        cur.execute(sql,r)

是您尝试运行的方法的替代方法。

© www.soinside.com 2019 - 2024. All rights reserved.