Halli Hallo,
ich weiss nicht, ob es schon zu spät für mich ist, oder ob das einfach
nicht geht. Ich versuche mit gerade an einem kleinen Script, welches mir
Datenbank Dumps erstellt. Da ich dieses gerne auch für andere Datenbanken
nutzen würde, würde ich mir gerne alle Tabellen der jeweiligen DB
angucken. Google, diverse Seiten und auch die MySQLdb Hilfe in Python
konnten nicht helfen.
Grüße prosta
Mit MySQLdb Tabellennamen herausfinden
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
In MySQL gibts "SHOW TABLES"... In SQLite müßte das mit "SELECT tbl_name FROM sqlite_master;" gehen...
Bei MySQL sind generell die SHOW Sachen interessant: http://dev.mysql.com/doc/refman/5.1/de/show.html
Bei MySQL sind generell die SHOW Sachen interessant: http://dev.mysql.com/doc/refman/5.1/de/show.html
Hi Jens, du hast mich auf den richtigen Weg gebracht danke!
Ein cursor.execute("Show tables") liefert in MySQLdb leider nur einen
Integer Wert zurück. Dank ein wenig Hilfe von google habe ich aber
folgendes gefunden:
Dies funktioniert nun und liefert mir die Namen
Gruss prosta
Ein cursor.execute("Show tables") liefert in MySQLdb leider nur einen
Integer Wert zurück. Dank ein wenig Hilfe von google habe ich aber
folgendes gefunden:
Code: Alles auswählen
cursor.execute("SHOW TABLES")
tab_namen = map(lambda c: "%s" % c, cursor.fetchall())
Gruss prosta
`cursor.execute()` liefert bei der DB-API 2.0 grundsätzlich eine ganze Zahl, das ist unabhängig von der verwendeten Datenbank und der Anfrage die man ausführen lässt.pr0stAta hat geschrieben:Ein cursor.execute("Show tables") liefert in MySQLdb leider nur einen Integer Wert zurück.
Wenn Du die Ergebniszeilen unbedingt in Zeichenketten umwandeln willst, dann kannst Du den ``lambda``-Ausdruck durch `str` ersetzen. Aber Du könntest auch den Tabellennamen in jeder Ergebniszeile aus dem Tupel herausholen. Das sollte dann schon eine Zeichenkette sein. Ungetestet:Dank ein wenig Hilfe von google habe ich aber
folgendes gefunden:Dies funktioniert nun und liefert mir die NamenCode: Alles auswählen
cursor.execute("SHOW TABLES") tab_namen = map(lambda c: "%s" % c, cursor.fetchall())
Code: Alles auswählen
tab_namen = [row[0] for row in cursor]
Hallo,
ich versuche das ganze gerade mit einer Microsoft Access-Datenbank.
Gibt bei mir die Meldung, dass ich nur DELETE, SELECT, INSERT und UPDATE als Argumente benutzen darf.
???
ich versuche das ganze gerade mit einer Microsoft Access-Datenbank.
Gibt bei mir die Meldung, dass ich nur DELETE, SELECT, INSERT und UPDATE als Argumente benutzen darf.
???
Code: Alles auswählen
import dbi
import odbc
myconn = odbc.odbc('DRIVER=Microsoft Access-Treiber (*.mdb);UID=admin;DBQ=D:\\ODBC_Test.mdb')
mycursor = myconn.cursor()
mycursor.execute("SHOW TABLES")
mydata = [row[0] for row in mycursor]
print mydata[0]
mycursor.close()
myconn.close()
print mydata[1]
Hum .. dieser Thread beschäftigt sich eigentlich mit MySQL, und nicht mit MSAccess Carsten.
SQL ist nicht überall gleich, und "SHOW TABLES" funktioniert primär nur mit dem MySQL Datenbankmanagementsystem.
MS Access Datenbanken brauchen da ein wenig mehr Aufwand, aber ich habe es gerade einmal ausprobiert.
Folgende vorbereitende Schritte sind notwendig:
Nun kannst du wie folgt mit Python zugreifen:
Gruß,
>>Masaru<<
SQL ist nicht überall gleich, und "SHOW TABLES" funktioniert primär nur mit dem MySQL Datenbankmanagementsystem.
MS Access Datenbanken brauchen da ein wenig mehr Aufwand, aber ich habe es gerade einmal ausprobiert.
Folgende vorbereitende Schritte sind notwendig:
- 1.) Datenbank mit MS Access öffnen
2.) "Extras -> Optionen -> Ansicht", dort das Kästchen "Systemobjekte" anhaken
3.) "Extras -> Sicherheit -> Benutzer- und Gruppenberechtigungen", dort den Administrator links in der Benutzerliste und rechts bei den Objektnamen "MSysObjects" anwählen und dann den Haken bei "Daten lesen" setzen
4.) Datenbank unter MS Access abspeichern und schließen
Nun kannst du wie folgt mit Python zugreifen:
Code: Alles auswählen
import odbc
myconn = odbc.odbc("DRIVER=Microsoft Access-Treiber (*.mdb);UID=Administrator;DBQ=D:\\ODBC_Test.mdb")
# UID muss der Administrator namentlich sein, wie er unter den Benutzerliste auch aufgelistet ist
mycursor = myconn.cursor()
mycursor .execute("SELECT Name FROM MSysObjects WHERE Type = 1;")
alle_tabellen_namen = [ tabelle[0] for tabelle in mycursor.fetchall() ]
# 'alle_tabellen_namen' enthält nun aber auch die Systemobjekt Tabellen (wie 'MSysObects')
# die man wie folgt herrausparsen könnte
tabellen_namen = [ name for name in alle_tabellen_namen if not name.startswith('MSys') ]
>>Masaru<<
Zuletzt geändert von Masaru am Mittwoch 21. Februar 2007, 13:51, insgesamt 1-mal geändert.
Vielen Dank. Funktioniert prächtig.
Wollte nicht unbedingt einen eigenen Threat eröffnen, wiel dieses "show tables" SQL-Statement genau das wäre, was ich gebraucht habe.
P.S.Würde mich ja nicht mit Access rumärgern, aber mein Vater hat sich eine umfangreiche Geschichtsdatenbank in Access angelegt, für die ich eine GUI mit wxPython basteln will.Wenn ich das fertig habe, werde ich die Datenbank als nächstes in MySQL portieren .
Wollte nicht unbedingt einen eigenen Threat eröffnen, wiel dieses "show tables" SQL-Statement genau das wäre, was ich gebraucht habe.
P.S.Würde mich ja nicht mit Access rumärgern, aber mein Vater hat sich eine umfangreiche Geschichtsdatenbank in Access angelegt, für die ich eine GUI mit wxPython basteln will.Wenn ich das fertig habe, werde ich die Datenbank als nächstes in MySQL portieren .