我正在尝试从具有一个CLOB列的Oracle表中读取数据。我可以使用数据创建数据帧,但我必须维护与数据库的连接。
df = pd.read_sql("""
select
COURSE_NUMB,
COURSE_DESCRIPTION
from COURSE_DATA
""",conn)
df.head(1)
COURSE_NUMB COURSE_DESCRIPTION
1 Lorem ipsum dolor sit amet, consectetur....
关闭数据库连接后,CLOB数据不再可用。
conn.close()
df.head()
DatabaseError: DPI-1040: LOB was already closed
我尝试过复制数据帧或将其导出为json文件,但复制或导出中仍然缺少CLOB数据。
发布于 2019-06-12 12:26:09
我们必须在CLOB对象上调用read()来将它的值读入DataFrame:
### Set up table with CLOB data
SQL> DESC course_data
Name Null? Type
------------------ ----- ------
COURSE_NUMB NUMBER
COURSE_DESCRIPTION CLOB
SQL> SELECT * FROM course_data;
COURSE_NUMB COURSE_DESCRIPTION
----------- -------------------------------------------
1 Lorem ipsum dolor sit amet, consectetur....
### Python code
df = pd.DataFrame()
cursor = conn.cursor()
cursor.execute(""" select COURSE_NUMB, COURSE_DESCRIPTION from COURSE_DATA """)
for row in cursor:
# row[0] = COURSE_NUMB
# row[1] = COURSE_DESCRIPTION - note the call to "read()" on the CLOB
df_tmp = pd.DataFrame([[row[0], row[1].read()]],
columns=["COURSE_NUMB", "COURSE_DESCRIPTION"])
df = df.append(df_tmp, ignore_index=True)
print ("***Before conn.close()")
print(df.head(1))
conn.close()
print ("\n***After conn.close()")
print(df.head())
### Output
$ python test.py
***Before conn.close()
COURSE_NUMB COURSE_DESCRIPTION
0 1 Lorem ipsum dolor sit amet, consectetur....
***After conn.close()
COURSE_NUMB COURSE_DESCRIPTION
0 1 Lorem ipsum dolor sit amet, consectetur....
https://stackoverflow.com/questions/56550576
复制相似问题