簡體   English   中英

無法使用python將數據從csv文件插入oracle

[英]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 文件。

我發現了這個... cx_Oracle 庫提供了LOB 對象來在 Oracle 中編寫 CLOB 對象。 閱讀這個,但它是為 2.X.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM