Python数据库连接:ValueError:<;0x000001CB4819E5A0处的cx_Oracle.LOB对象>;不是unicode或序列

Python数据库连接:ValueError:<;0x000001CB4819E5A0处的cx_Oracle.LOB对象>;不是unicode或序列,python,sql,cx-oracle,Python,Sql,Cx Oracle,嘿,我正在使用cx_Oracle模块从Oracle数据库中提取一个日期字段。修订后的查询和连接模块包括: def getInitialData(): 打印(“收集…”) dsn\u tns=cx\u Oracle.makedsn('xyz.com','1234',service\u name='DB') conn=cx\u Oracle.connect(user=r'me',password='password',dsn=dsn\u tns) SQLquery=(“”) 选择REPORTDATE

嘿,我正在使用cx_Oracle模块从Oracle数据库中提取一个日期字段。修订后的查询和连接模块包括:

def getInitialData():
打印(“收集…”)
dsn\u tns=cx\u Oracle.makedsn('xyz.com','1234',service\u name='DB')
conn=cx\u Oracle.connect(user=r'me',password='password',dsn=dsn\u tns)
SQLquery=(“”)
选择REPORTDATE,
根据详细描述
哪里
报告日期>截止日期('01/01/2015 0:00:00','MM/DD/YYYY HH24:MI:SS'))
datai=pd.read\u sql(SQLquery,conn)
datai['REPORTDATE']=pd.to_datetime(datai['REPORTDATE'],格式=“%m-%d-%Y”)
打印(“检索到的数据”)
返回数据
但是,当我稍后尝试通过以下方式处理此问题时:

writer=index.writer()
打印(“添加数据,这可能需要一些时间…”)
对于范围内的i(len(initialData)):
writer.add_文档(docId=initialData.iloc[i]['CONTENTUID']\
content=initialData.iloc[i][LOWER(LDTEXT)]\
日期=initialData.iloc[i]['REPORTDATE'])
writer.commit()
我得到:

ValueError: <cx_Oracle.LOB object at 0x000001CB4819E5A0> is not unicode or sequence
ValueError:不是unicode或序列

有人看到过这个错误吗?文档/谷歌中没有关于它的内容。这是怎么发生的?这对我来说很奇怪,因为我可以使用不同的日期字段来实现这一点。由于这是一个数据转换问题,了解使用中的字符集将是有用的信息,因此两者都显示数据类型为
datetime64[ns]

一些想法:

  • 当你连接的时候,设置这个参数。为数据使用适当的字符集:

     connection = cx_Oracle.connect(connectString, encoding="UTF-8", nencoding="UTF-8")
    
    如果有NCHAR/NVARCHAR/NCLOB列,则只需使用
    nencoding

  • 对于“小”LOB(小于1GB且适合于cx_Oracle内存),您可能希望将它们作为直接获取,因为这样更快。添加类型处理程序:

    def OutputTypeHandler(cursor, name, defaultType, size, precision, scale):
        if defaultType == cx_Oracle.CLOB:
            return cursor.var(cx_Oracle.LONG_STRING, arraysize=cursor.arraysize)
        if defaultType == cx_Oracle.BLOB:
            return cursor.var(cx_Oracle.LONG_BINARY, arraysize=cursor.arraysize)
    
  • 检查是否有无法在字符集中处理的损坏数据


  • 由于这是一个数据转换问题,了解正在使用的字符集将是有用的信息

    一些想法:

  • 当你连接的时候,设置这个参数。为数据使用适当的字符集:

     connection = cx_Oracle.connect(connectString, encoding="UTF-8", nencoding="UTF-8")
    
    如果有NCHAR/NVARCHAR/NCLOB列,则只需使用
    nencoding

  • 对于“小”LOB(小于1GB且适合于cx_Oracle内存),您可能希望将它们作为直接获取,因为这样更快。添加类型处理程序:

    def OutputTypeHandler(cursor, name, defaultType, size, precision, scale):
        if defaultType == cx_Oracle.CLOB:
            return cursor.var(cx_Oracle.LONG_STRING, arraysize=cursor.arraysize)
        if defaultType == cx_Oracle.BLOB:
            return cursor.var(cx_Oracle.LONG_BINARY, arraysize=cursor.arraysize)
    
  • 检查是否有无法在字符集中处理的损坏数据