Seite 1 von 1

ZODB FileStorage

Verfasst: Samstag 31. Januar 2009, 19:28
von INFACT
Hallo, ich lese gerade das Buch "Das Python Praxisbuch" und bin in Kapitel 13 - Persistenz und Datenbanken . Ich habe ZODB mit easy_install.exe vom Python Ordner installiert. Nun steht im ersten Programm:

Code: Alles auswählen

from ZODB import FileStorage, DB
Mein Problem ist nun, dass FileStorage nicht in ZODB ist, das heißt das wenn ich

Code: Alles auswählen

"FileStorage" in dir(ZODB)
eingebe, ich False erhalte.
Wie kann ich das nun anders lösen, weil ich noch keine Ahnung von ZODB habe. Das ist ja auch mein erstes Programm. Was kann ich tun? :(

Verfasst: Samstag 31. Januar 2009, 19:44
von BlackJack
Wo ist denn das Problem? Hast Du denn mal versucht `FileStorage` zu importieren und eine Fehlermeldung bekommen, oder bist Du bloss verwundert, dass dieses Modul nicht ohne es zu importieren im Package-Modul enthalten ist?

Verfasst: Samstag 31. Januar 2009, 20:02
von INFACT
BlackJack hat geschrieben:Wo ist denn das Problem? Hast Du denn mal versucht `FileStorage` zu importieren und eine Fehlermeldung bekommen, oder bist Du bloss verwundert, dass dieses Modul nicht ohne es zu importieren im Package-Modul enthalten ist?
Das erste:
Wenn ich dieses "Script" ausführe:

Code: Alles auswählen

import logging

import ZODB
import ZODB.FileStorage
db = ZODB.DB(
    ZODB.FileStorage.FileStorage(r'C:\Dokumente und Einstellungen\Robin\Desktop\Python\ZODB')
)
root = db.open().root()

logger=logging.getLogger('FileStorage')

Erhalte ich immer folgende Fehlermeldung:

Code: Alles auswählen

>>> ================================ RESTART ================================
>>> 

Traceback (most recent call last):
  File "C:/Dokumente und Einstellungen/Robin/Desktop/Python/Datenbanken/ZODB.py", line 3, in <module>
    import ZODB
  File "C:/Dokumente und Einstellungen/Robin/Desktop/Python/Datenbanken\ZODB.py", line 4, in <module>
    import ZODB.FileStorage
ImportError: No module named FileStorage
Ich möchtenun wissen, wie ich das FileStorage erstezen kann.
Aber ich frage mich wozu du das fragst, es läuft doch auf das gleiche hinaus, oder...?

Verfasst: Samstag 31. Januar 2009, 20:10
von Lonestar
evtl solltest du dein Beispielscript erst einmal umbenennen?
Guck mal nach was du importierst und wie dein Script heisst

Verfasst: Samstag 31. Januar 2009, 20:17
von INFACT
Lonestar hat geschrieben:evtl solltest du dein Beispielscript erst einmal umbenennen?
Guck mal nach was du importierst und wie dein Script heisst
Das hat mir geholfen, aber warum. Ich meine, es müsste doch klar sein, dass ein Script sich nicht selber importieren sollte?
Naja ich kann es ja nicht ändern.
Vielen Dank!

Verfasst: Samstag 31. Januar 2009, 20:34
von Leonidas
INFACT hat geschrieben:Das hat mir geholfen, aber warum. Ich meine, es müsste doch klar sein, dass ein Script sich nicht selber importieren sollte?
Warum sollte das klar sein?

Verfasst: Samstag 31. Januar 2009, 21:49
von INFACT
Leonidas hat geschrieben:
INFACT hat geschrieben:Das hat mir geholfen, aber warum. Ich meine, es müsste doch klar sein, dass ein Script sich nicht selber importieren sollte?
Warum sollte das klar sein?
Warum sollte man sein eigenes Programm importieren?

Verfasst: Samstag 31. Januar 2009, 22:43
von Leonidas
INFACT hat geschrieben:Warum sollte man sein eigenes Programm importieren?
Um auf einfache Weise eine Referenz auf das aktuelle Modul zu bekommen. Und weil es, nunja, eigentlich auch logisch ist. Wenn in ``sys.path`` ``.`` an erster Stelle ist, dann würde man auch erwarten, dass die Skripte die ``.`` liegen auch vor denen die weiter hinten im ``sys.path`` liegen importiert werden.

Verfasst: Sonntag 1. Februar 2009, 09:46
von str1442
PEP8 hat geschrieben:Törichte Konsistenz ist des Kleingeistes Kobold
Das ist der wohl tollste Satz aus der PEP8 Übersetzung :)

import self

Verfasst: Dienstag 10. Februar 2009, 14:06
von farid
Leonidas hat geschrieben:
INFACT hat geschrieben:Warum sollte man sein eigenes Programm importieren?
Um auf einfache Weise eine Referenz auf das aktuelle Modul zu bekommen. Und weil es, nunja, eigentlich auch logisch ist. Wenn in ``sys.path`` ``.`` an erster Stelle ist, dann würde man auch erwarten, dass die Skripte die ``.`` liegen auch vor denen die weiter hinten im ``sys.path`` liegen importiert werden.
Richtig.

Das mit dem Importieren des eigenen Programms sollte eigentlich eine FAQ sein. Ist mir auch schon oefters passiert, wenn auch nicht so direkt und unmittelbar. ;)

Re: import self

Verfasst: Dienstag 10. Februar 2009, 15:18
von Leonidas
farid hat geschrieben:Das mit dem Importieren des eigenen Programms sollte eigentlich eine FAQ sein. Ist mir auch schon oefters passiert, wenn auch nicht so direkt und unmittelbar. ;)
[wiki=FAQ#WarumFunktionierenImportierteModuleNicht]Tatsache[/wiki].

Das ist mir anfangs auch passiert und dann später nochmal, als ich ``parser`` überdeckt habe und wo RuleDispatch Probleme bekommen hat. Also habe ich den Abschnitt mal in die FAQ hinzugefügt.