pickled data in die SQL...

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 20. Oktober 2005, 06:33

Ich arbeite gerade am Plugin-Manager... Nun wird die ganze Konfiguration eines Plugins in die Datenbank geschrieben. Dabei hat sich ein Problem ergeben, bei dem ich mich erstmal mit pickel.dumps() beholfen hab.

Es gibt nämlich Daten, ein kleines Dict, welches keine bestimmte Anzahl an Einträgen hat. Wie soll ich solche Daten in die DB legen, wenn ich einmal überhaupt keinen, einen oder fünf Einträge hab?

Natürlich könnte ich jetzt eine zusätzliche Tabelle anlegen und dann alles mit IDs verbinden... Aber das ist auch reichlich umständlich. Zumal es mit pickle.dumps() rein und mit pickle.loads() wieder raus, super easy geht...

Ich hab noch keinen Test gemacht, was von der Preformance besser ist, also Tabellen mit IDs oder die pickle Variante.

Generell, was haltet ihr davon?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 20. Oktober 2005, 08:20

jens hat geschrieben:Natürlich könnte ich jetzt eine zusätzliche Tabelle anlegen und dann alles mit IDs verbinden... Aber das ist auch reichlich umständlich. Zumal es mit pickle.dumps() rein und mit pickle.loads() wieder raus, super easy geht...
[...]
Generell, was haltet ihr davon?
Hi Jens!
Ich komme beim Programmieren an meinem Warenwirtschaftsprogramm auch immer wieder mal in eine solche Situation. Nach einigem Hin und Her bin ich zu dem Schluss gekommen, dass eine Änderung der Tabellenstruktur nur dann sinnvoll ist, wenn es einen zusätzlichen Nutzen bringt. So ein Nutzen könnte sein, dass man schnell (indiziert) nach den Daten suchen kann.

Wenn das nicht notwendig ist, dann spricht nichts dagegen, ein paar Einstellungen als XML-String oder gepickelt als BINARY in die Datenbank zu schreiben.

Ein XML-String, YAML-String oder Ähnliches, hat gegenüber einem BINARY den Vorteil, dass man bei Bedarf immer noch nach den Daten suchen kann. Zwar bringt ein Index in dem Fall nichts mehr, aber es bleibt durchsuchbar.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 20. Oktober 2005, 08:30

Also ich hab jetzt durch umstrukturierung zwei von drei pickel-Datenfelden wegrationalisieren könne, weil ich die dort gespeicherten Daten doch besser an andere Stelle einbringen konnte...

Aber es bleibt noch einer Übrig. Und zwar sind das Deinstallations-Daten für ein Plugin.

Ein Plugin darf nun neuerdings auch SQL-Tabellen selber erzeugen. Beim deinstalieren muß ich allerdings Wissen welche das waren um diese auch zu löschen.
Ich geh einfach hin und lege in der Plugin-Config die SQL-Befehle zum erstellen und löschen ab.

Ich könnte natürlich die SQL-lösch-Kommandos beim deinstallieren frisch aus der Plugin-Config lesen, möchte aber besser die Kommandos in der DB abspeichern. Wenn sich die Kommandos in einer neuen Plugin-Version geändert haben, funktioniert das Deinstallieren auch dann, wenn man schon das neue Plugin auf dem Server verschoben hat.

Wie dem auch sei. Ich muß also Daten wie diese hier abspeichern:

Code: Alles auswählen

SQL_deinstall_commands = [
    "DROP TABLE `$tableprefix$_test1`;",
    "DROP TABLE `test2`;",
]
Dafür nehme ich jetzt halt pickle und pack damit die Kommandoliste in die DB.
Ich weiß nicht ob ich diese auch einfach aneinander hängen sollte und später wieder mit .split(";") trennen kann... Aber was ist, wenn im Kommando ein ";" vorkommen sollte. Dann produziert split(";") Käse... Oder in nehme ein .join()-Zeichen, welches auf jeden Fall nicht in einem SQL-Kommando vorkommen kann... z.B. \x00 Aber dann gibt's evtl. ärger mit dem Text-Feld, oder?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten