Seite 1 von 1
[Plone] Dictionary, ZSQL, MySQL
Verfasst: Freitag 23. April 2010, 12:28
von mgraf
Hallo,
ich hoffe das Forum hier passt
Und zwar ich habe Daten in einer MySQL Tabelle wie folgt stehen:
{'1a': '1', '1c': '3', '1b': '2', '1e': '5', '1d': '4', '1f': '6', '3a': '', '2a': ''}
Ich brauche diese aber jetzt wieder als dictionary!
geht das?
Momentan sieht mein Code so aus:
Code: Alles auswählen
eggs = {}
tester = context.sql_select_registration_data(id='9359411',tester='1')[0]
spam = tester.category
for feld, anzahl in eggs.items():
print "Name: %s Nummer: %s" % (feld, anzahl)
return printed
führt zu diesem Ergebnis:
lg
michi
Re: [Plone] Dictionary, ZSQL, MySQL
Verfasst: Freitag 23. April 2010, 12:31
von Hyperion
mgraf hat geschrieben:
Und zwar ich habe Daten in einer MySQL Tabelle wie folgt stehen:
{'1a': '1', '1c': '3', '1b': '2', '1e': '5', '1d': '4', '1f': '6', '3a': '', '2a': ''}
Ich brauche diese aber jetzt wieder als dictionary!
geht das?
Was hat das mit Webframeworks zu tun? Oder übersehe ich hier was?
Wie sieht denn die Tabellenstruktur aus? Ich hoffe doch mal, du hast das da oben nicht als "String" in einer Spalte stehen?
Verfasst: Freitag 23. April 2010, 12:44
von mgraf
naja, im Prinzip mit Plone/Zope und in dem Falle auch mit restrictedPython...
doch, als varchar string

Verfasst: Freitag 23. April 2010, 12:47
von BlackJack
@mgraf: Das glaube ich nicht. Du änderst nichts an `eggs` also kann da am Ende auch nicht diese Ausgabe kommen.
Du brauchst halt einen Parser für das Format. Wie kommt das denn da rein? Hättest Du da nicht irgendeinen Standard nehmen können, wie zum Beispiel `json`? Dann hättest Du das Modul dafür nehmen können und müsstest nicht selber einen Parser basteln.
Verfasst: Freitag 23. April 2010, 12:48
von mgraf
Wenn ich mir hätte aussuchen hätte können, welche Daten ich bekomme - hätte ich auch nicht alles in eine extra DB gespeichert und gleich alles in der ZODB abgelegt!
Verfasst: Freitag 23. April 2010, 13:41
von Hyperion
mgraf hat geschrieben:Wenn ich mir hätte aussuchen hätte können, welche Daten ich bekomme - hätte ich auch nicht alles in eine extra DB gespeichert und gleich alles in der ZODB abgelegt!
Das Problem ist eher, dass die Daten gegen die 1. Normalform verstoßen, sprich, dass sie nicht normalisiert sind. Kannst Du da nicht einfach eine sinnvollere Tabelle anlegen, in der die Wertpaare direkt als Tupel repräsentiert werden?
Verfasst: Freitag 23. April 2010, 13:44
von mgraf
Nein, leider nicht. die Datenbank hat eine externe Firma für uns erstellt.
Verfasst: Freitag 23. April 2010, 14:26
von ms4py
Wenn du der Quelle *absolut* vertrauen kannst (und evt. noch mit Fehlerbehandlung):
Code: Alles auswählen
>>> eggs = eval("{'1a': '1', '1c': '3', '1b': '2', '1e': '5', '1d': '4', '1f': '
6', '3a': '', '2a': ''}")
>>> eggs
{'1a': '1', '1c': '3', '1b': '2', '1e': '5', '1d': '4', '1f': '6', '3a': '', '2a
': ''}
>>> eggs['1a']
'1'
Verfasst: Freitag 23. April 2010, 14:41
von frabron
Das ist doch schon JSON, oder irre ich mich da? Es gibt ab 2.6 ein json Modul, mit dem man das parsen kann:
Code: Alles auswählen
>>> foo = json.loads('{"bar": "baz", "ham": "hamz"}')
>>> foo
{u'bar': u'baz', u'ham': u'hamz'}
>>> print foo['bar']
baz
In der Konsole war das etwas zickig hinsichtlich der Quotes, da wollte das Modul unbedingt "" für den JSON Teil, aber sowas kann man ja flott ersetzen ...
Verfasst: Freitag 23. April 2010, 14:51
von mgraf
Danke für die Hilfe, aber ich habs mir jetzt relativ einfach gemacht, und picke mir die einzelnen Elemente raus.
Es lebe regex

Verfasst: Freitag 23. April 2010, 17:30
von mgraf
So ich ändere jetzt die Datenbank doch.
Wie muss meine Mysql Tabelle aussehen, das ich Tupel oder ein dict einfügen kann, und diese auch wieder rausbekomme?
Und wie mein python damit ich die Daten valide in die DB einfüge?
Json steht leider nicht zur Debatte -> (Restricted) Python
Verfasst: Samstag 24. April 2010, 15:45
von Hyperion
mgraf hat geschrieben:
Wie muss meine Mysql Tabelle aussehen, das ich Tupel oder ein dict einfügen kann, und diese auch wieder rausbekomme?
Die Frage muss lauten: Wie muss die Tabelle aussehen, damit ich die 1. Normalform einhalte?
Nach dem gezeigten Testdatensatz brauchst Du ein Attribut für die Keys und eines für die Values. Die Frage ist noch, was PK ist - reichen da die "Key"-Attribute, oder ist das ganze ggf. ein weak-entity.
Verfasst: Dienstag 27. April 2010, 08:29
von Darii
mgraf hat geschrieben:So ich ändere jetzt die Datenbank doch.
Wie muss meine Mysql Tabelle aussehen, das ich Tupel oder ein dict einfügen kann, und diese auch wieder rausbekomme?
Du kriegst so oder so keine Tupel oder Dicts aus deiner Datenbank raus. MySQL ist keine Objektdatenbank. Das heißt du musst sie vorher geeignet (de-)serialisieren.
So etwas ist in ZSQL anscheinend auch vorgesehen, allerdings hast du die Hälfe verschwiegen, was zum Teufel soll printed sein? Wo kommt das her, fällt das vom Himmel? Und vor allem *was* sind diese ganzen anderen Variablen davor? Irgendwelche super-magischen Objekte die genau das tun was du willst?
Entschuldige den Tonfall aber wenn einem unreflektiert solche völlig aus dem Zusammenhang gerissene Codefetzen vorgesetzt werden kriege ist mein guter Wille irgendwann erschöpft.