我是Python的新手,曾尝试使用Python将excel工作表内容插入到oracle数据库中。
我使用PowerShell
以下是我迄今为止没有任何运气的尝试:
import cx_Oracle
import csv
import sys
cx_Oracle.init_oracle_client(lib_dir=r"C:UsersUserAppDataLocalProgramsPythonPython39")
connection = cx_Oracle.connect( user="username", password="password", dsn="hostname:port/dbname")
cursor=connection.cursor()
with open('c:oracleoutput.csv') as f:
reader=csv.DictReader(f,delimiter=',')
for row in reader:
sqlquery="INSERT INTO table VALUES (%d,'%s','%s','%s')" %(x,row['ORG_NAME'],row['ID'],row['ORGANIZATION_ID'])
cursor.execute(sqlquery)
x=x+1
conn.commit()
Excel工作表只有3行,尽管我这样做是为了测试。
任何提示都将不胜感激。
也尝试了csv2db,但总是得到以下错误:
连接到数据库时出错:数据库错误:DPI-1047:找不到64位Oracle客户端库
当我从Python连接到数据库时,我不会收到这个错误,但当我从Powershell连接csv2db时,我总是收到这个错误。
如果你想读取CSV文件,你可以做得比阅读cx_Oracle手动将CSV文件加载到Oracle数据库:更糟糕
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()