如何在 python 中从 postgres 数据库 insert/retrieve .mat( matlab ) 文件?
How do I insert/retrieve .mat( matlab ) files from postgres database in python?
环顾四周后,我编写了这个 insertion/retrieval 代码来读取 .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 文件打开,并且文件大小比我尝试的原始文件大得多(大约两倍大)存储在数据库中。
我假设正在发生一些我没有正确处理的数据转换。
非常感谢任何帮助。
根据 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()
环顾四周后,我编写了这个 insertion/retrieval 代码来读取 .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 文件打开,并且文件大小比我尝试的原始文件大得多(大约两倍大)存储在数据库中。
我假设正在发生一些我没有正确处理的数据转换。
非常感谢任何帮助。
根据 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()