【问题标题】:cx_Oracle.DatabaseError: ORA-01036: illegal variable name/numbercx_Oracle.DatabaseError: ORA-01036: 非法变量名称/编号
【发布时间】:2020-07-29 14:28:51
【问题描述】:

我正在尝试将 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

【问题讨论】:

标签: oracle python-2.7 csv sql-insert cx-oracle


【解决方案1】:

来自Oracle documentation

import cx_Oracle
import csv

. . .

# Predefine the memory areas to match the table definition
cursor.setinputsizes(None, 25)

# Adjust the batch size to meet your memory and performance requirements
batch_size = 10000

with open('testsp.csv', 'r') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    sql = "insert into test (id,name) values (:1, :2)"
    data = []
    for line in csv_reader:
        data.append((line[0], line[1]))
        if len(data) % batch_size == 0:
            cursor.executemany(sql, data)
            data = []
    if data:
        cursor.executemany(sql, data)
    con.commit()

【讨论】:

    猜你喜欢
    • 2013-01-06
    • 2011-10-05
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    相关资源
    最近更新 更多