[Plone] Dictionary, ZSQL, MySQL

Django, Flask, Bottle, WSGI, CGI…
Antworten
mgraf
User
Beiträge: 34
Registriert: Donnerstag 14. Juni 2007, 11:46

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:

Code: Alles auswählen

{u"'": u"'"}

lg
michi
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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?
mgraf
User
Beiträge: 34
Registriert: Donnerstag 14. Juni 2007, 11:46

naja, im Prinzip mit Plone/Zope und in dem Falle auch mit restrictedPython...

doch, als varchar string ;-)
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.
mgraf
User
Beiträge: 34
Registriert: Donnerstag 14. Juni 2007, 11:46

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!
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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?
mgraf
User
Beiträge: 34
Registriert: Donnerstag 14. Juni 2007, 11:46

Nein, leider nicht. die Datenbank hat eine externe Firma für uns erstellt.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

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'
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
frabron
User
Beiträge: 306
Registriert: Dienstag 31. März 2009, 14:36

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 ...
mgraf
User
Beiträge: 34
Registriert: Donnerstag 14. Juni 2007, 11:46

Danke für die Hilfe, aber ich habs mir jetzt relativ einfach gemacht, und picke mir die einzelnen Elemente raus.
Es lebe regex :-D
mgraf
User
Beiträge: 34
Registriert: Donnerstag 14. Juni 2007, 11:46

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
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

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.
Antworten