cx_Oracle.NotSupportedError:不支持类型为WindowsPath的Python值

时间:2018-04-22 06:58:51

标签: python python-3.x oracle cx-oracle

我正在使用cx_Oracle将目录中的二进制文件作为BLOB插入到表的列中。

所以,我打算使用python3的PATH模块,然后通过使用WindowsPath获取文件来插入二进制文件。这是一个例子: -

import sys
import cx_Oracle

from pathlib import Path

username = 'EWORDPR'
password = 'EWORDPR'
databaseName = "10.11.201.161:1521/ORCL"

connection = cx_Oracle.connect (username,password,databaseName) # Connection Established

cursor=connection.cursor()

my_file = Path("22 Apr 2018.txt")
print("File exists:",my_file.is_file()) #File Exists: True

rows = [ ('01787440110', 'Rakin','22-04-2017', my_file )]
cursor.executemany('insert into CHAT_HISTORY(MOBILE_NUMBER,USER_NAME,CHAT_DATE,USER_TRANSCRIPTS) values (:1, :2, :3, :4)', rows)

connection.commit()

cursor.close()

connection.close()

然后,我收到以下错误: -

  

追踪(最近一次通话):     文件“F:/ Python with ORACLE / orapy.py”,第53行,in       print(cursor.executemany('插入CHAT_HISTORY(MOBILE_NUMBER,USER_NAME,CHAT_DATE,USER_TRANSCRIPTS)值(:1,:2,:3,:4)',行))   cx_Oracle.NotSupportedError:不支持类型为WindowsPath的Python值。

有没有办法从目录导出二进制文件,然后使用cx_Oracle直接将文件作为BLOB插入?

1 个答案:

答案 0 :(得分:1)

由于文件可以包含任何类型的数据,您必须自己打开并阅读内容。使用以下内容可以轻松完成此操作:

rows = [ ('01787440110', 'Rakin','22-04-2017', my_file.open("rb").read() )]

这将有效地适用于容易适合内存的文件,对于那些类型的文件,这是最有效的方法。对于非常大的文件,您需要使用LOB定位器并改为传输数据。