0

环顾四周后,我编写了此插入/检索代码以读取 .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"

尝试检索并将其保存到文件(文件名是“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 文件打开,并且文件大小比我尝试存储在数据库中的原始文件大得多(大约是原来的两倍) .

我假设正在发生一些我没有正确处理的数据转换。

非常感谢任何帮助。

4

1 回答 1

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()
于 2015-02-05T17:13:28.513 回答