insert into with a dictionary, or generally with a variable number of columns

From: Matthieu Rigal <mar(at)rapideye(dot)net>
To: psycopg(at)postgresql(dot)org
Subject: insert into with a dictionary, or generally with a variable number of columns
Date: 2012-07-03 09:59:02
Message-ID: CAH7Xw_Xxgt5A_i-xZtua2ev=DLAbYHCY3k7pNhWQNy==R8MaLg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: psycopg

Hi folks,

To make it very simple, I want to save a dictionary to a database.

I have a function that is reading various entries and returns a dictionary.
But the content of this dictionary depends on what it was "given" before.
Sometimes I want to insert a new row with 4 attributes, sometimes with 6...

Therefore, I was hoping to be able to do something like
cursor.mogrify('''INSERT INTO processing.raster_dataset %(columns)s VALUES
%(values)s ''', {'columns' :tuple(metaValues.keys()), 'values' :
tuple(metaValues.values())})

But it is not working, it returns all the column names in bracket and fails.

I tried specifying the columns as :
'columns' : ', '.join(metaValues.keys())

And as you can expect, it neither works.

Does anybody has a suggestion ? I'm sorry I could not find anything on
forums or previous threads, but maybe I was missing some keywords.

For the real enthousiasts, my final request is in fact even a bit harder.
But I think to be able to make once I can do the previous step. One of the
entry of the dictionary can be a geometry, with the value being the WKT
text of a geometry. And I want to convert it to a PostGIS geometry using
the "GeometryFromText()" function when passing the value.

Best Regards,
Matthieu

--
RapidEye AG
Molkenmarkt 30
14776 Brandenburg an der Havel
Germany

Follow us on Twitter! www.twitter.com/rapideye_global

Head Office/Sitz der Gesellschaft: Brandenburg an der Havel
Management Board/Vorstand: Ryan Johnson
Chairman of Supervisory Board/Vorsitzender des Aufsichtsrates: Robert
Johnson
Commercial Register/Handelsregister Potsdam HRB 24742 P
Tax Number/Steuernummer: 048/100/00320
VAT-Ident-Number/Ust.-ID: DE 815303842
DIN EN ISO 9001 certified

Responses

Browse psycopg by date

  From Date Subject
Next Message Adrian Klaver 2012-07-03 14:34:41 Re: insert into with a dictionary, or generally with a variable number of columns
Previous Message Daniele Varrazzo 2012-07-03 01:25:49 Re: Change in datetime type casting