Seite 1 von 1

mysql datenbankname auslesen

Verfasst: Sonntag 14. Januar 2007, 18:55
von bj
hallo,

habe folgendes problem...

ich hab eine db in mysql
dann hab ich den python code...

Code: Alles auswählen

def GetTables(self):
    """ returns a list with the table names """
    tables = self.connection.execute('SHOW TABLES');
    tableArray = []
    for row in tables:
        tableArray.append(row.Tables_in_fbuch)
    return tableArray
so läuft der schön durch "Tables_in_fbuch"...

ich will des allerdings dynamisch haben..
wenn ich also mal ein anderes dbmodell hab, welches z.b. adrbuch heißt, wird ja dann bei dem befehl "show tables" des ausgegeben "Tables_in_adrbuch"
Wie bekomm ich des in eine variable rein, dass ich die dann in die for-schleife einbaun kann?


gruß
bj

Verfasst: Sonntag 14. Januar 2007, 19:29
von BlackJack
Ungetestet:

Code: Alles auswählen

from operator import attrgetter

def get_tables(self, db_name):
    return map(attrgetter('Tables_in_' + db_name),
               self.connection.execute('SHOW TABLES'))
Deine Namen sind übrigens nicht PEP 8-konform und das Semikolon ist überflüssig.

Verfasst: Sonntag 14. Januar 2007, 19:59
von bj
hi

danke für die schnelle antwort!!

was machst du mit dem hier? du benutzt ja nirgens row...

Code: Alles auswählen

return map(attrgetter('Tables_in_' + db_name),self.connection.execute('SHOW TABLES'))
gruß
bj

Verfasst: Sonntag 14. Januar 2007, 21:33
von BlackJack
bj hat geschrieben:was machst du mit dem hier? du benutzt ja nirgens row...

Code: Alles auswählen

return map(attrgetter('Tables_in_' + db_name),self.connection.execute('SHOW TABLES'))
Das Ergebnis von dem `execute()` ist etwas über das man iterieren kann. Das machst Du mit einer ``for``-Schleife und nennst das "aktuelle" Objekt `row`. Diese Schleife ist in der `map()`-Funktion "versteckt". `map()` nimmt eine Funktion und ein Objekt über das man iterieren kann, wendet die Funktion auf jedes Objekt an und steckt das Ergebnis in eine Liste, die dann zurückgegeben wird.

Wenn man `map()` selber schreiben wollte, sähe das ungefähr so aus:

Code: Alles auswählen

def my_map(func, iterable):
    result = list()
    for item in iterable:
        result.append(func(item))
    return result

Verfasst: Sonntag 14. Januar 2007, 22:31
von bj
hi


vielen dank!


gruß
bj