环顾四周之后,我编写了这个插入/检索代码来读取.mat文件,将其发送到bytea postgres数据库列,然后尝试检索它并重新创建文件。
我使用psycopg2进行数据库交互。
插入:
full_file_path = os.path.join( folder_path, single_file )
f = open(full_file_path,'rb')
file_data = psycopg2.Binary( f.read() )
cur.execute( "INSERT INTO file_data_table "
"( id, file_name, file_data, insertion_date) "
"VALUES ( DEFAULT, %s, %s, %s)",
(single_file, file_data, timestamp))
f.close()
conn.commit()
print single_file + " inserted"
尝试检索并将其保存到文件(file_name为“something.mat”)
cur = conn.cursor()
cur.execute( "SELECT encode( file_data, 'hex' ), file_name FROM file_data_table")
result = cur.fetchall()
print result[0][0]
for row in result:
print row[1]
full_file_path = os.path.join(folder_path, row[1])
f = open(full_file_path,'w')
f.write(row[0])
f.close()
它从数据库中检索数据并成功将其保存在文件中,但该文件不会作为mat文件打开,并且文件大小比我尝试存储的原始文件大得多(大约两倍)在数据库中。
我假设发生了一些数据转换,我没有正确处理。
非常感谢任何帮助。
答案 0 :(得分:0)
使用Josh Kupershmidt的小费,我弄清楚出了什么问题。
通过删除编码并将检索到的缓冲区转换为字符串,它现在似乎可以正常工作。
cur = conn.cursor()
cur.execute( "SELECT file_data, file_name FROM file_data_table")
result = cur.fetchall()
print result[0][0]
for row in result:
print row[1]
full_file_path = os.path.join(folder_path, row[1])
f = open(full_file_path,'w')
f.write(str(row[0]))
f.close()