Hallo,
auf meinem shared host server habe ich leider keinen direkten Zugriff auf die MySQL Datenbank von ausserhalb des Servers (also nur über localhost). Da ich aber Daten von ausserhalb speichern möchte und auch die Einfachheit von sqlobject schätze, dachte ich mir, dass ich die erzeugten Objekte doch einfach serialisieren und via HTTP hochladen könnte. Leider konnte ich nicht herausfinden wie man sqlobject serialisiert.
Hat vielleicht jemand einen Tipp oder möglicherweise eine bessere Alternative wie ich die Daten auf den Webserver bekomme?
lg,
lunas
SqlObject serialisieren
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
`pickle` hat nicht funktioniert?
Eine Möglichkeit wäre es einen SQL-Dump verwenden, eine andere Möglichkeit wäre es, die SQL-Objekte in einer Datei erstellen zu lassen und diese auf dem Server ausführen.
Eine Möglichkeit wäre es einen SQL-Dump verwenden, eine andere Möglichkeit wäre es, die SQL-Objekte in einer Datei erstellen zu lassen und diese auf dem Server ausführen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ist das Dateiformat denn unter Linux und Windows das gleichen?`pickle` hat nicht funktioniert?
Das klingt mir nach zu viel Aufwand...Für ähnliche Zwecke habe ich die Daten einfach in ein Zwischenformat wie YAML oder JSON gebracht und dann wieder andernorts neu eingefügt.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ja. Solltest nur nicht vergessen, die Dateien im Binärmodus zu öffnen.lunas hat geschrieben:Ist das Dateiformat denn unter Linux und Windows das gleichen?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Um in eines oder aus einem der beiden Formate zu serialisieren, bedarf es mit den entsprechenden Paketen (z.B. ``PyYAML`` respektive ``simplejson``) nur einen Aufruf.lunas hat geschrieben:Das klingt mir nach zu viel Aufwand...Für ähnliche Zwecke habe ich die Daten einfach in ein Zwischenformat wie YAML oder JSON gebracht und dann wieder andernorts neu eingefügt.
Beim Einlesen der so serialisierten Daten etwa habe ich sofort ein Dictionary, dessen Schlüssel meinen Tabellennamen entsprechend und dessen Werte jeweils eine Liste von Dictionaries der Tabellenrecords sind. Für jeden dieser Records muss ich dann nur ein neues Objekt erstellen (die Klasse richtet sich nach dem Tabellennamen) und schon habe ich die Daten in der Datenbank.
Ein beispielhaftes Create-/Import-Script kann etwa so aussehen:
Code: Alles auswählen
from __future__ import with_statement
import yaml
from myapp.model import * # evil!
model_classes = [Person, Address, ContactInformation]
for mc in model_classes:
print '*** Dropping table for %s model...' % mc.__name__
mc.dropTable(ifExists=True)
print '*** Creating table for %s model...' % mc.__name__
mc.createTable(ifNotExists=True)
print '*** Inserting initial data...'
with open('export.yaml', 'rb') as f:
data = yaml.safe_load(f)
for mc in model_classes:
mc_name = mc.__name__.lower()
mc_data = data.get(mc_name)
if mc_data is None:
print 'No data found for class %s, skipping.' % mc_name
continue
for values in mc_data:
mc(**values)
print '*** Done.'
Zuletzt geändert von Y0Gi am Samstag 3. November 2007, 11:59, insgesamt 2-mal geändert.
Also wenn ich versuche eine slqobject Klasse zu pickeln, dann wird lediglich die Klasse, aber nicht deren Tabelleinträge gespeichert.
Obiger Abschnitt funktioniert nicht, da die Werte (in diesem Fall für 'item') nicht mit abgespeichert werden. Gibt es noch eine andere Möglichkeit an die Daten von MyTable zu gelangen?
Code: Alles auswählen
class MyTable(sqlobject.SQLObject)
item = sqlobject.IntCol()
MyTable(item=2)
pickle.dump(MyTable, open('mytable.pickle', 'w' ))
Welch ein Wunder: Wenn Du die Klasse picklest wird auch tatsächlich die Klasse gepickelt. Wer hätte das gedacht.
Ja, ich war auch ganz erstaunt. Python ist echt manchmal für eine Überraschung gut...BlackJack hat geschrieben:Welch ein Wunder: Wenn Du die Klasse picklest wird auch tatsächlich die Klasse gepickelt. Wer hätte das gedacht.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ja, die Werte auslesen und wie Y0Gi vorgeschlagen hat etwa in YAML oder JSON abzuspeichern.lunas hat geschrieben:Obiger Abschnitt funktioniert nicht, da die Werte (in diesem Fall für 'item') nicht mit abgespeichert werden. Gibt es noch eine andere Möglichkeit an die Daten von MyTable zu gelangen?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice