我正在使用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插入?
答案 0 :(得分:1)
由于文件可以包含任何类型的数据,您必须自己打开并阅读内容。使用以下内容可以轻松完成此操作:
rows = [ ('01787440110', 'Rakin','22-04-2017', my_file.open("rb").read() )]
这将有效地适用于容易适合内存的文件,对于那些类型的文件,这是最有效的方法。对于非常大的文件,您需要使用LOB定位器并改为传输数据。