[英]failed to insert data from csv file to oracle using python
我打算使用 Python 和 Oracle 連接器將 csv 文件中的數據逐行插入到 oracle 數據庫中,但是對於太長的文本,出現錯誤
ORA-01704: 字符串文字太長
代碼如下:
from time import gmtime, strftime
with open(path-to-csv-file) as f:
reader=csv.DictReader(f,delimiter=',')
for row in reader:
today = strftime("%Y-%m-%d %H:%M:%S", gmtime())
if len(row['answer']) < 2000:
###[ The query in this part works]###
sqlquery="INSERT INTO TEST VALUES ('%s','%s')" %(row['answer'],today)
cur.execute(sqlquery)
else:
###[ The query below got and error ORA-01704: string literal too long]###
sqlquery="INSERT INTO TEST VALUES ('%s','%s')" %(row['answer'],today)
cur.execute(sqlquery)
我在 stackoverflow 上搜索過,並嘗試在 len(row["answer"]) 超過 2000 時將列名 TEST1 設置為更大的大小
cur.setinputsizes(TEST1 = cx_Oracle.CLOB)
但顯然它不起作用,因為查詢形式不同。
在 else 部分運行時:
else:
sqlquery="INSERT INTO TEST VALUES ('%s','%s')" %(row['answer'],today)
cur.setinputsizes(TEST1 = cx_Oracle.CLOB)
cur.execute(sqlquery)
ORA-01036: 非法變量名/編號
被退回
另外,我試圖將變量聲明為 varchar2 來解決這個問題,但徒勞無功。 如果有人對這個問題有更好的想法,我們將不勝感激。
首先,您得到 ORA-1036,因為您的sqlquery
沒有任何變量。 您正在嘗試設置 TEST1 變量,但它在您的代碼中的什么位置? 使用變量,您的代碼應該類似於INSERT INTO TEST VALUES (:TEST1, :TEST2)
; 取而代之的是,您為SQL 注入提供了很好的能力。
關於更好的主意......至於我,沒有理由復制現有的決定。 我只是使用Oracle SQL*Loader ,它也可以加載 csv 文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.