In Plone über Python eine MySQL Datenbank auslesen

Django, Flask, Bottle, WSGI, CGI…
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

In Plone über Python eine MySQL Datenbank auslesen

Beitragvon JR » Freitag 24. Februar 2006, 11:06

Hallo Allerseits!

Jetzt probiere ich seite Stunden herum und es will einfach nicht funzen :-(

Ich habe ein Modul erstellt:

Code: Alles auswählen

import MySQLdb

def getuseradress(self):
    # Verbindung aufbauen
    Con = MySQLdb.Connect(host="localhost", port=3306, user="USER", passwd="PASSWORT", db="DATENBANK")
       
    # Handle holen
    Cursor = Con.cursor()
       
    # SQL-Kommando abgeben:
    Cursor.execute('select * from mitglieder where mit_user="TEST";')
       
    # Zurueckgegeben wird ein Tupel voller Tupel
    # Jedes Element in Array ist ein Tupel pro Datensatz
    Array = Cursor.fetchall()
       
    # Aenderungen bestaetigen
    Con.commit()
       
    # Verbindung trennen
    Con.close()

    result = Array[1]   
    # Tupelelement ausgeben
    return result[1]


Da ich glaube, dass ich aufgrund der Python-Einschränkung in Plone das Modul nicht im ZMI als Script (Python) - Objekt benutzen kann, habe ich es mit einer externen Methode versucht. Habe das Script also unter dem Namen SQL.py in den entsprechenden Extensions-Ordner von Plone gelegt und als ich in Zope das Objekt External Method mit Module Name = SQL, und Function Name = getuseradress adden wollte, kam die Fehlermeldung:

Fehlertyp
ImportError

Fehlerwert
No module named MySQLdb

Hat jemand eine Idee, was ich falsch mache?
Das Skript selbst funktioniert in der Python-IDLE einwandfrei.

Ich hoffe, jemand kann mir einen guten Tip geben. Bin halt erst in Kapitel 6 vom Plone-Buch :oops:

Grüße
JR
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: In Plone über Python eine MySQL Datenbank auslesen

Beitragvon gerold » Freitag 24. Februar 2006, 13:52

JR hat geschrieben:Habe das Script also unter dem Namen SQL.py in den entsprechenden Extensions-Ordner von Plone gelegt und als ich in Zope das Objekt External Method mit Module Name = SQL, und Function Name = getuseradress adden wollte, kam die Fehlermeldung:

Fehlertyp
ImportError

Fehlerwert
No module named MySQLdb

Hi JR!

Unter Windows läuft Zope mit einem eigenen Python. Dieses wird beim Installieren von Zope mitinstalliert und befindet sich im Ordner "bin" unterhalb de Zope-Programmordners.

Falls du die MySQL-Schnittstelle mit der Anweisung "python setup.py install" installiert hast, ist diese zwar für dein normales Python installiert, aber nicht für das Python, welches von Zope verwendet wird.

Installiere die MySQL-Schnittstelle noch einmal und gib dabei den Pfad zum Python von Zope an. Zum Beispiel: "C:\Programme\Zope\bin\python.exe setup.py install". Dann sollte es funktionieren. Vorsicht! Erst seit Zope 2.9 wird Python 2.4.x verwendet. Falls du eine vorkompilierte MySQL-Schnittstelle benutzt, musst du aufpassen, dass du diese für die richtige Python-Version verwendest.

Bitte verwende nicht den Namen "SQL.py", da ich glaube, dass dieser schon von Zope intern verwendet wird. Nicht dass du damit später mal Probleme bekommst.

Dass Zope auch mit einem MySQL-Datenadapter ausgestattet werden kann und du damit viel komfortabler arbeiten könntest, weißt du aber, oder?

mfg
Gerold
:-)
Zuletzt geändert von gerold am Freitag 24. Februar 2006, 13:55, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 24. Februar 2006, 13:55

http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Aller Anfang ist schwer...

Beitragvon JR » Freitag 24. Februar 2006, 16:04

Hallo Gerold!

Jetzt sitze ich hier schon seit heute morgen um 10 Uhr vor der Kiste.
Ich hoffe der folgende Beitrag schreckt nicht ab. Ich weiß wirklich nicht weiter und freue mich über jede Hilfe,
da ich insgesamt absolut begeistert von den Möglichkeiten bin, die Zope, aber vor allem Ploe und Python bieten!

Also ich habe folgendes gemacht:

Erstmal alles deinstalliert und dann

1) Plone-2.1.2.exe in "C:\Programme\Plone 2" installieren

2) python-2.4.2.msi in "C:\Python24\" installieren

3) Systemvariable PYTHONPATH definieren:

a)
Mit rechter Taste auf Arbeitsplatz -> Eigenschaften
und dort auf den Reiter "Erweitert"

b)
Dann auf den Button "Umgebungsvariablen" gehen und unten in der Liste gucken,
ob eine Systemvariable "PYTHONPATH" existiert.

Entweder anlegen oder ändern zu:
Name der Variablen: PYTHONPATH
Wert der Variablen: C:\Programme\Plone 2\Zope\lib\python


4)
Der Produktordner von Zope liegt auf "C:\Programme\Plone 2\Zope\lib\python\Products"

Zope ist scheinbar im Paket des Plone-Installer (ca. 15 MB) dabei,
so dass ich es nicht explizit installiert habe. Ich kann auch einwandfrei aufs komplette
ZOPE-ZMI zugreifen.

Um deinen Rat zu folgen, habe ich in den Ordner (siehe unter 4) folgendes Paket entpackt:
ZMySQLDA-2.0.8.tar.gz.

Es existiert nun also das Verzeichnis
"C:\Programme\Plone 2\Zope\lib\python\Products\ZMySQLDA"

-
Wenn ich nun Zope Restarte, erscheinen im Product Management zwei Broken Products:

ERSTENS:

MySQLdb (Broken product MySQLdb)

-> TraceBack:

Traceback (most recent call last):
File "C:\Programme\Plone 2\Zope\lib\python\OFS\Application.py", line 673, in import_product
product=__import__(pname, global_dict, global_dict, silly)
File "C:\Programme\Plone 2\Zope\lib\python\Products\MySQLdb\__init__.py", line 27, in ?
import _mysql
ImportError: No module named _mysql

ZWEITENS:
ZMySQLDA (Broken product ZMySQLDA)

-> TraceBack:

Traceback (most recent call last):
File "C:\Programme\Plone 2\Zope\lib\python\OFS\Application.py", line 673, in import_product
product=__import__(pname, global_dict, global_dict, silly)
File "C:\Programme\Plone 2\Zope\lib\python\Products\ZMySQLDA\__init__.py", line 91, in ?
import DA
File "C:\Programme\Plone 2\Zope\lib\python\Products\ZMySQLDA\DA.py", line 92, in ?
from db import DB
File "C:\Programme\Plone 2\Zope\lib\python\Products\ZMySQLDA\db.py", line 89, in ?
import _mysql
ImportError: No module named _mysql

------------------------

Scheinbar fehlt also irgendwo das Modul _mysql. Nur wo??

Schließlich habe ich noch das Produkt MySQL-python-1.2.0.tar.gz runtergeladen und in den Importordner entpackt.
Leider habe ich genau dieselben Trceback-Messages bei den Broken Products wie sie oben gepostet sind! :-(

------------------------

Meine offenen Fragen:
Muss ich ZOPE doch vor Plone einzeln in "C:\Profgramme\Zope-2.8.4-final" installieren?

Wenn ja, soll Plone dann trotzdem nach "C:\Programme\Plone 2", wie Andy McKay es beschreibt?

Wenn ich das so mache, entstehen zwei verschiedene Pythonsysteme. Eines in Zope und das eigene von Plone.
Damit habe ich dann auch zwei "...\python\Products" - Verzeichnisse. Ich möchte halt ohne Probleme scripten können
und zwar auf Plone und/ oder Ploneebene.


Bis ein System erstmal so läuft, wie es soll, vergehen wie so oft viele viele Stunden... :-(

Ich hoffe, hier findet sich jemand, der es geschafft hat meinen Post bis hier durchzulesen und noch die Muße hat,
mir mit guten Ratschlägen zu antworten ;-)

Bis denn
JR
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Aller Anfang ist schwer...

Beitragvon gerold » Freitag 24. Februar 2006, 16:28

JR hat geschrieben:Jetzt sitze ich hier schon seit heute morgen um 10 Uhr vor der Kiste.

Hi JR!

Ich schreibe mal eine kleine Anleitung zusammen. Kann aber ein bischen dauern.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Kurzanleitung für Windows - Zope, Plone, MySQL und den ZMySQ

Beitragvon gerold » Freitag 24. Februar 2006, 18:49

Viel Vergnügen beim Durchlesen :-)

Vielleicht macht sich jemand die Mühe, diesen Text vom reStructuredText nach BBCode zu übersetzen. Ich werde ihn dann gerne in das "Anleitungen/Tutorial"-Forum übernehmen.

Edit: Den Text der Anleitung finden Sie in diesem Thread:
http://www.python-forum.de/viewtopic.php?p=32457#32457

mfg
Gerold
:-)

Edit: Die Installation des ZMySQLDA genauer beschrieben.
Edit2: Darauf hingewiesen, dass nur der Inhalt und nicht der Ordner PLATLIB kopiert werden darf.
Zuletzt geändert von gerold am Sonntag 5. März 2006, 23:26, insgesamt 3-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Freitag 24. Februar 2006, 18:55

@gerold: oder du stellst es ins wiki :roll:
TUFKAB – the user formerly known as blackbird
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Ich bin begeistert

Beitragvon JR » Freitag 24. Februar 2006, 19:29

Hallo Gerold!

Ich wollte dir grad was schreiben und da sehe ich eine Mörderanleitung :-)
Ich werde sie sofort durchgehen.

Aber nen Ordnen gibt es schon jetzt!!

Ich melde mich mit Feedback!

Bis denn und schöne Grüße
JR
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Hm, "Z MySQL Database Connection" will nicht...

Beitragvon JR » Freitag 24. Februar 2006, 21:09

Hallo Gerold,

Erst einmal ein großes Lob an dich:
Deine Anleitung ist perfekt geschrieben.

Leider ist das Produkt "ZMySQLDBA" nicht in Zope angekommen.

Bin deiner Anleitung Schritt für Schritt gefolgt.

Bis "Abschließende Tests"
Bin ins ZMI gegangen und wenn ich ein Objekt adden möchte, wird mir leider
kein "Z MySQL Database Connection"-Objekt angeboten.

Auch im Product Management ist es nicht zu sehen.

Bist du ganz sicher, dass ich das Paket ZMySQLDA-2.0.8.tar.gz in einen leeren Ordner
(ich habe ihn gleich ZMySQLDA) genannt und diesen "leeren" Ordner
nach "C:\Programme\Zope-2.9.0\lib\python\Products\" kopieren muss?

-----

Meine Vermutung:

Du hast geschrieben:

- Mit WinRAR oder einem anderen Programm das Archiv "ZMySQLDA-2.0.8.tar.gz"
in einen leeren Ordner extrahieren.

- Den Ordner (nicht nur den Inhalt) "ZMySQLDA" in den Ordner
"C:\Programme\Zope-2.9.0\lib\python\Products" kopieren.

Wenn ich "ZMySQLDA-2.0.8.tar.gz" in einen leeren Ordner entpacke entsteht
"leerer Ordner\lib\python\Products\ZMySQLDA"

Ich habe den leeren Ordner dann zu "ZMySQLDA" umbenannt und in
"C:\Programme\Zope-2.9.0\lib\python\Products\" kopiert.

Dann Zope-Neustart.

Zope startet tadellos
doch es gibt kein Objekt / Produkt "Z MySQL Database Connection". Also habe ich folgendes versucht.

Ich bin in "C:\Programme\Zope-2.9.0\lib\python\Products\" rein und habe den Ordner "ZMySQLDA"
wieder gelöscht.

Nun habe ich wieder das Paket ZMySQLDA-2.0.8.tar.gz in einen leeren Ordner entpackt
und diesmal nur den letzten Ordner des entstandenen Pfads
"leerer Ordner\lib\python\Products\ZMySQLDA" (also den Ordner "ZMySQLDA") in
"C:\Programme\Zope-2.9.0\lib\python\Products\" kopiert.

Zope beenden.
Zope starten in Konsole

-> Zope startet nicht mehr :-(

Also wieder so, wie du es beschrieben hast...

Endergebnis ist dasselbe. Zope läuft einwandfrei, aber ohne Objekt / Produkt "Z MySQL Database Connection"

Hast du noch eine Idee?
Deine Beschreibung habe ich gleich mal ausgedruckt. Die ist echt prima.

Grüße
JR
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Hm, "Z MySQL Database Connection" will nicht..

Beitragvon gerold » Freitag 24. Februar 2006, 21:26

JR hat geschrieben:Leider ist das Produkt "ZMySQLDBA" nicht in Zope angekommen.

Hi JR!

Ich probier es mal ein wenig anders:

Wenn man das Archiv "ZMySQLDA-2.0.8.tar.gz" entpackt, dann bekommt man eine Ordnerstruktur. Diese Sieht so aus: "\lib\python\Products\ZMySQLDA". Diese muss vollständig in den Ordner "C:\Programme\Zope-2.9.0" kopiert werden.

Das Endergebnis sollte dann so aussehen:

[code=]C:\Programme\Zope-2.9.0\lib\python\Products\ZMySQLDA>tree /F
Auflistung der Ordnerpfade für Datenträger System
Datenträgernummer: 0006FE80 883D:A622
C:.
¦ browse.dtml
¦ CHANGES.txt
¦ connectionAdd.dtml
¦ connectionEdit.dtml
¦ DA.py
¦ DA.pyc
¦ DABase.py
¦ DABase.pyc
¦ db.py
¦ db.pyc
¦ DEPENDENCIES.txt
¦ README.txt
¦ table_info.dtml
¦ VERSION.txt
¦ __init__.py
¦ __init__.pyc
¦
+---help
¦ DA.py
¦ DABase.py
¦ db.py
¦
+---icons
bin.gif
date.gif
datetime.gif
field.gif
float.gif
int.gif
stable.gif
table.gif
text.gif
time.gif
view.gif
what.gif[/code]
Wenn jetzt Zope nicht startet, dann gibt es einen Traceback. Der sollte uns sagen warum es nicht starten will. Debug-Modus nicht vergessen.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Okay, so hab ich es nämlich gemacht

Beitragvon JR » Freitag 24. Februar 2006, 21:38

Also gut.

Wir sind dem Problem sehr dicht auf den Fersen, denn
in "C:\Programme\Zope-2.9.0\lib\python\Products\ZMySQLDA"
erhalte ich nach dem Konsolenstart deine aufgezeigt Struktur mit einem Unterschied:

Python komiliert mir nur db.py und DA.py zu *.pyc Dateien.

Im Gegensatz zu dir habe ich keine DABase.pyc sondern nur das reine py-Script.

Meld mich gleich nochmal :-)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 24. Februar 2006, 21:41

Hi JR!

Ich habe den Text für die Installation des "ZMySQLDA" leicht geändert. Vielleicht ist er jetzt verständlicher.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Wie

Beitragvon JR » Freitag 24. Februar 2006, 21:48

Hi!

Ich habe eben zum Glück an der richtigen Stelle nen Screenshot machen können. war gar nicht so einfach ;-)

Leider weiß ich nicht, wie ich ein Bild ins Forum hochladen kann. Deswegen liegt es jetzt kurzzeitig auf

http://www.jamrai.de

Hoffe das hilft...

Gerold, hast da noch einen guten Tipp?

JR[/img]
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Okay, so hab ich es nämlich gemacht

Beitragvon gerold » Freitag 24. Februar 2006, 21:49

JR hat geschrieben:Wir sind dem Problem sehr dicht auf den Fersen, denn
in "C:\Programme\Zope-2.9.0\lib\python\Products\ZMySQLDA"
erhalte ich nach dem Konsolenstart deine aufgezeigt Struktur mit einem Unterschied:
Python komiliert mir nur db.py und DA.py zu *.pyc Dateien.
Im Gegensatz zu dir habe ich keine DABase.pyc sondern nur das reine py-Script.

Hi JR!

So wie es aussieht, wird zuerst "db.py" importiert und dann erst "DABase.py". Das spricht für einen Fehler beim Importieren der Datenbank-Verbindung. Probier mal aus, ob die Datenbankschnittstelle korrekt läuft.

Wichtig: Unbedingt mit dem Python von Zope:
C:\Programme\Zope-2.9.0\bin\python.exe

[code=]Python 2.4.2 (#67, Sep 28 2005, 12:41:11) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
>>> import _mysql
>>> from _mysql_exceptions import OperationalError
>>>[/code]
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

_mysql

Beitragvon JR » Freitag 24. Februar 2006, 21:55

Melde mich gleich nochmal...

Ich habe den Ordner PATLIB in
C:\Programme\Zope-2.9.0\lib\python\PLATLIB

und nicht

C:\Programme\Zope-2.9.0\lib\python\PLATLIB

ich habe nur ein python aufm rechner. Nach dem, was ich heute alles gelsesen habe, ist das wohl am besten..

Kann es an meiner Umgebungsvariable PYTHONPATH liegen?
Der Wert ist C:\Programme\Zope-2.9.0\lib\python

Ich scheitere gerade schon am import MySQLdb

JR

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder