user3328955
user3328955

Reputation: 95

save file (.pdf) in database whit python 2.7

Craig Ringer Ican not work whit large object functions My database looks like this this is my table

-- Table: files
-- 
DROP TABLE files;

CREATE TABLE files
 (   
id serial NOT NULL,
  orig_filename text NOT NULL,
 file_data bytea NOT NULL,
  CONSTRAINT files_pkey PRIMARY KEY (id)
 )
 WITH (
  OIDS=FALSE
 );
 ALTER TABLE files

I want save .pdf in my database, I saw you did the last answer, but using python27 (read the file and convert to a buffer object or use the large object functions)

I did the code would look like

path="D:/me/A/Res.pdf"
listaderuta = path.split("/")
longitud=len(listaderuta)
f = open(path,'rb')
f.read().__str__()
cursor = con.cursor()
cursor.execute("INSERT INTO files(id, orig_filename, file_data) VALUES (DEFAULT,%s,%s) RETURNING id", (listaderuta[longitud-1], f.read()))

but when I'm downloading, I save

fula = open("D:/INSTALL/pepe.pdf",'wb')
cursor.execute("SELECT file_data, orig_filename FROM files WHERE id = %s", (int(17),))
(file_data, orig_filename) = cursor.fetchone()
fula.write(file_data)
fula.close()

but when I'm downloading the file can not be opened, this damaged I repeat I can not work with large object functions

try this and turned me, can you help ?

Upvotes: 0

Views: 2380

Answers (2)

Abhishek Jain
Abhishek Jain

Reputation: 4199

Just correction in INSERT statement, INSERT statement will be failed with null value in column "orig_filename" violates not-null constraint as orig_filename is defined as NOT NULL.... use instead ("INSERT INTO files(id, orig_filename,file_data) VALUES ('1','filename.pdf',%s)", (binary,))

Upvotes: 0

user7029
user7029

Reputation: 36

I am thinking that psycopg2 Binary function does not user lob functions.

thus I used.....

path="salman.pdf"
f = open(path,'rb')
dat = f.read()
binary = psycopg2.Binary(dat)
cursor.execute("INSERT INTO files(id, file_data) VALUES ('1',%s)", (binary,))
conn.commit()

Upvotes: 2

Related Questions