Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python和cx_oracle读写Clob数据_Python_Json_Oracle_Clob_Cx Oracle - Fatal编程技术网

使用python和cx_oracle读写Clob数据

使用python和cx_oracle读写Clob数据,python,json,oracle,clob,cx-oracle,Python,Json,Oracle,Clob,Cx Oracle,我试图从测试数据库中读取Clob数据,并将其插入到开发数据库中。我能做到,但表现很差。 对于10万行,它需要8到12个小时,并在本地机器上运行。 我想知道我的方法是否正确,或者有没有更好的方法。 以下是我连接后的代码: for row in rows.fetchall() x = [] data = row.read json_data = json.loads(data) x.append(json_data) 我就是这样做的。我只是想知道有没有更好的方法。 堆栈:P

我试图从测试数据库中读取Clob数据,并将其插入到开发数据库中。我能做到,但表现很差。 对于10万行,它需要8到12个小时,并在本地机器上运行。 我想知道我的方法是否正确,或者有没有更好的方法。 以下是我连接后的代码:

for row in rows.fetchall()
   x = []
   data = row.read
   json_data = json.loads(data)
   x.append(json_data)
我就是这样做的。我只是想知道有没有更好的方法。 堆栈:Python、OracleDB、cx_oracle、json 感谢来自cx\U Oracle的以下代码是您想要使用的代码。这将大大提高性能

def OutputTypeHandler(cursor, name, defaultType, size, precision, scale):
    if defaultType == cx_Oracle.CLOB:
        return cursor.var(cx_Oracle.LONG_STRING, arraysize = cursor.arraysize)
    elif defaultType == cx_Oracle.BLOB:
        return cursor.var(cx_Oracle.LONG_BINARY, arraysize = cursor.arraysize)

conn = cx_Oracle.Connection("user/pw@dsn")
conn.outputtypehandler = OutputTypeHandler
cursor = conn.cursor()
cursor.execute("""
        select CLOBColumn
        from SomeTable""")
json_data = [json.loads(s) for s, in cursor]

首先,
打印
非常昂贵。如果x%10000==0:print row,您可以尝试在enumerate(rows.fetchall()):中对x执行
操作,然后在
下隐藏
print
,但我也不认为这足以解释速度慢的原因。因此,我认为您可能只需在不使用
.fetchall()
的情况下迭代光标。在此之后,我对
Clob
不太熟悉,无法确定是否可以在每一行上使用
json.loads()
。请尝试获取LOB,如中所示,另请参见教程中的第7节(LOB)