Seite 1 von 1

AttributeError bei Ergebnisanzeige einer External Method

Verfasst: Mittwoch 17. Januar 2007, 18:25
von keboo
Hallo Leute,

Bitte um eure Hilfe!

Ich habe folgende externe Methode geschrieben um eine MySQL Select Abfrage in ein Dictionnary zu bekommen, welches übergeben werden soll:

Code: Alles auswählen

def mysql2dict(table):

    import MySQLdb
    
    # connect
    db = MySQLdb.connect(host="localhost", user="root", passwd="secret", db="testdb")
    
    # create a cursor
    
    cursor = MySQLdb.cursors.DictCursor(db)
    # execute SQL statement
    cursor.execute("SELECT * FROM "+table)
    
    # get the resultset as a tuple
    result = cursor.fetchall()
    
    return result
Die Funktion soll den Namen der Tabelle aus eine Page Template in welchem es aufgerufen wird übergeben bekommen:

Code: Alles auswählen

<p tal:content="context/test_external?table=person"></p>
Hier kommt es leider zu einem AttributeError. Es funktioniert, wenn ich tabe statisch in meiner Methode setze. So leider nicht.

Ich will nur einmal in meinem Page Template den Rückgabewert angezigt bekommen.

Was hab ich nicht begriffen bei der Übergabe von Parametern an eine Externe Methode?

Danke für eure Hilfe,

Johannes

Re: AttributeError bei Ergebnisanzeige einer External Method

Verfasst: Mittwoch 17. Januar 2007, 18:48
von gerold
keboo hat geschrieben:Ich will nur einmal in meinem Page Template den Rückgabewert angezigt bekommen.
Hi Johannes!

Zum Testen von "Externen Methoden", gebe ich gerne einfach einen Text zurück.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import MySQLdb


def mysql2dict(self, tablename):
   
    # connect
    db = MySQLdb.connect(host="localhost", user="root", passwd="secret", db="testdb")
   
    # create a cursor
    cursor = MySQLdb.cursors.DictCursor(db)
    
    # execute SQL statement
    cursor.execute("SELECT * FROM " + tablename)
   
    # get the resultset as a tuple
    result = cursor.fetchall()
    
    ##################
    # Zum Testen, würde ich einfach mal einen String zurück liefern lassen
    ##################
    result = repr(self) + " " + repr(tablename) + " " + repr(result)
    
    return result
mfg
Gerold
:-)

Funktioniert leider immer noch nicht

Verfasst: Donnerstag 18. Januar 2007, 10:26
von keboo
Hallo Gerold,

Ich bekomme leider immer noch die selber Fehlermeldung mit dem AttributeError. Keine Ahnung an was das liegen kann.

Code: Alles auswählen

<p tal:content="context/test_external?tablename=person"></p>
Kann es sein, dass das Problem im tal:content Aufruf liegt?

Muss ich beim Ändern einer Externen Methode immer den Zope Server restarten?

Danke,

Johannes

Zusatz

Verfasst: Donnerstag 18. Januar 2007, 10:32
von keboo
Wenn ich die externe Methode direkt per URL anspreche und darin den Tabellennamen angebe sehe ich als Ergbnis:

Code: Alles auswählen

<Folder at /Plone/testings> 'person' ({'person_id': 1L, 'vorname': 'Kai', 'name': 'Huber'}, {'person_id': 2L, 'vorname': 'Johannes', 'name': 'Berger'}, {'person_id': 3L, 'vorname': 'Maier', 'name': 'Peter'})
Wie kann ich nur die Ergebnisliste als Variable (tal:define ... ) ansprechen, damit ich das Ergbnis weiter verabeiten kann?

Danke,
Johannes