【问题标题】:python read CLOB datapython读取CLOB数据
【发布时间】:2019-06-11 19:30:24
【问题描述】:

我正在尝试从具有一个 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 数据。

【问题讨论】:

    标签: python oracle


    【解决方案1】:

    我们必须在 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....
    

    【讨论】:

      猜你喜欢
      • 2015-03-02
      • 2021-03-25
      • 1970-01-01
      • 2017-12-19
      • 2014-04-28
      • 2011-04-05
      • 2015-09-08
      • 1970-01-01
      • 2015-08-24
      相关资源
      最近更新 更多