psycopg2 for insertion of binary data to PostgreSQL database

Thomas Jollans thomas at jollybox.de
Sun Aug 22 18:04:07 EDT 2010


On Sunday 22 August 2010, it occurred to Julia Jacobson to exclaim:
> Thanks a lot, this was the solution.
> It would be greate, if you could also show me a way to extract the
> inserted binary object from the table on the server to a file on a client.

Probably something along the lines of:

* execute an appropriate SELECT query
* get the record you're interested in
* open a file for writing
* f.write(data)
* f.close() and other clean-up code

> 
>  > Peter Otten wrote:
> >> Julia Jacobson wrote:
> >> 
> >> Hello everybody out there using python,
> >> 
> >> For the insertion of pictures into my PostgreSQL database [with table
> >> foo created by SQL command "CREATE TABLE foo (bmp BYTEA)], I've written
> >> the following script:
> >> 
> >> #!/usr/bin/python
> >> import psycopg2
> >> 
> >> try:
> >>       conn = psycopg2.connect("dbname='postgres' user='postgres'
> >> 
> >> host='localhost' password='data'");
> >> 
> >> except:
> >>       print "I am unable to connect to the database"
> >> 
> >> cur = conn.cursor()
> >> f = open("test.bmp", 'rb')
> >> myfile = f.read()
> >> 
> >> try:
> >>       cur.execute("INSERT INTO foo VALUES (%s)",(buffer(myfile),))
> >> 
> >> except:
> >>       print "Insert unsuccessful"
> >> 
> >> "python script.py" runs the script without any errors or messages.
> >> However, the SQL command "SELECT * FROM foo"  returns the output "foo (0
> >> rows)" with no entries in the table.
> >> I'm using Python 2.7 and PostgreSQL 8.3.
> >> Could anyone help me to find a way to pin down the problem?
> > 
> > Perhaps you need to conn.commit() your changes.



More information about the Python-list mailing list