我正在尝试将一个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
参数元组或映射应在序列lines中找到,该序列是executemany方法的第二个参数,而标题的字符串,如PERSONID,LASTNAME等。返回该参数的每一步。
未测试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)
是您尝试运行的方法的替代方法。