Postgresql hstore -> python dict

30/06/2010 - 20:36 von Sven Geggus | Report spam
Hallo zusammen,

ich versuche einen Postgresql hstore
(http://developer.postgresql.org/pgd...store.html)
in einen python dict einzulesen. Faktisch der selbe Datentyp nur
leider mit unterscheidlicher String Representation.

Dummerweise liefert psycopg2 einen String mit Postgresql einger
Sytax.

Das sieht dann so aus (UTF-8):

"foo"=>"\"foo\"=>\"bar\"", "name"=>"Rosenstüble", "amenity"=>"restaurant", "addr:city"=>"Karlsruhe", "addr:street"=>"Kleingàrtnerweg"

In Python Syntax wàre das:

{'foo': '"foo"=>"bar"', 'name': 'Rosenstüble', 'amenity': 'restaurant', 'addr:city': 'Karlsruhe', 'addr:street': 'Kleingàrtnerweg'}

Mein erster Ansatz war nun das einfach in normales CSV umzuwandeln
indem man "=>" durch ", " ersetzt.

Also so:
"foo", "\"foo\"=>\"bar\"", "name", "Rosenstüble", "amenity", "restaurant","addr:city", "Karlsruhe", "addr:street"=>"Kleingàrtnerweg"

dann den normalen CSV Parser zu verwenden und danach die
Listenelemente zu unescapen und manuell in einen dict einzusortieren.

Das tut soweit, allerdings schneidet dieser beim Wert des Schlüssels foo
das öffnende Anführungszeichen weg.

Kennt jemand den Grund?

Gibt es andere Ideen das geschickt zu lösen?

Könnte man eventuell etwas mit eval machen?

Alternativ müsste ich mal schaun ob ich vielleicht das Format das
postgres liefert durch einen anderen SQL Aufruf brauchbarer
hinkriege.

Gruss

Sven

The source code is not comprehensible
(found in bug section of man 8 telnetd on Redhat Linux)

/me is giggls@ircnet, http://sven.gegg.us/ on the Web
 

Lesen sie die antworten

#1 Sven Geggus
30/06/2010 - 20:50 | Warnen spam
Sven Geggus wrote:

Alternativ müsste ich mal schaun ob ich vielleicht das Format das
postgres liefert durch einen anderen SQL Aufruf brauchbarer
hinkriege.



OK Leute vergesst das Posting, das Ganze geht super einfach :)

Daher JFTR:

Wenn man
"select (each(tags)).key,(each(tags)).value"
statt
"select tags"
verwendet

erhàlt man direkt eine passende Liste für den dict() Konstructor.

Gruss

Sven

Den Rechtsstaat macht aus, dass Unschuldige wieder frei kommen
(Wolfgang Schàuble)

/me is , http://sven.gegg.us/ on the Web

Ähnliche fragen