Seite 1 von 1

mySQL Tabellen "Überhang" ermitteln...

Verfasst: Samstag 9. Juli 2005, 14:08
von jens
In phpMyAdmin sieht man in der Übersicht, wie groß jede Tabelle ist und wie groß der Überhang...
Weiß jemand wie man es mti SQL-Befehlen selber abrufen kann? Ich habe bisher nur SHOW TABLE STATUS gefunden.

Das Ergebniss von "SHOW TABLE STATUS" ist ja auch eine Tabelle.
Das problem ist, das die Tabelle nicht immer gleich aufgebaut ist, oder? Je nach SQL-Server-Version ist's mal anders...

Wie kann ich gezielt nur "Data_free" aus "SHOW TABLE STATUS" raus holen?

Verfasst: Samstag 9. Juli 2005, 15:10
von jens
Ich hab hier: http://www.planet-source-code.com/vb/sc ... 8&lngWId=8 ein PHP skript gefunden...
Für mich sieht das so aus, das aus den SHOW TABLE STATUS Ergebnissen gezielt Informationen mit einem Namen (im Beispiel "Create_time" und "Update_time") ermittelt werden...

Wo wir doch wieder On-Tropic sind: Gibts beim Python mySQLdb Modul eine Möglichkeit das nachzubilden???
Wobei cursor.fetchall() Ergebnisse Tuple sind und leider keine Dicts...

Verfasst: Samstag 9. Juli 2005, 17:12
von Gast
hallo jens,
Wobei cursor.fetchall() Ergebnisse Tuple sind und leider keine Dicts...
Du kannst dir das Ergebnis auch als Dict zutückgeben lassen. siehe http://www.python-forum.de/viewtopic.php?t=761

MfG
Andreas

Verfasst: Montag 11. Juli 2005, 06:36
von jens
Danke für deinen Tip! Ich denke ich probier mal die Lösung von XT@ngel!

Ich frage mich nur, warum ich mir eine Aufwändige MySQLdb wrapper geschrieben hab und mich keiner darauf aufmerksam gemacht hat, das es viel einfacher geht :(

Verfasst: Montag 11. Juli 2005, 07:12
von jens
So nun hab ich das was ich wollte:

Code: Alles auswählen

        self.db.conn.query( "SHOW TABLE STATUS" )
        results =  self.db.conn.store_result().fetch_row(maxrows=0, how=1)

        page += '<table id="internals_log_information" class="internals_table">'

        # Tabellen überschriften generieren
        page += "<tr>"
        page += "<th>name</th>"
        page += "<th>entries</th>" # Rows
        page += "<th>update_time</th>"
        page += "<th>size</th>"
        page += "<th>overhang</th>" # data_free
        page += "<th>collation</th>"
        page += "</tr>"

        total_rows = 0
        total_size = 0
        total_data_free = 0
        # eigentlichen Tabellen Daten erzeugen
        for line in results:
            page += "<tr>"
            page += "<td>%s</td>" % line["Name"]

            page += '<td style="text-align: right;">%s</td>' % line["Rows"]
            total_rows += line["Rows"]

            page += "<td>%s</td>" % line["Update_time"]
            if line["Data_length"] < line["Index_length"]:
                size = line["Index_length"]
            else:
                size = line["Data_length"]
            page += '<td style="text-align: right;">%sKB</td>' % Tools.formatter( size/1024.0, "%0.1f")
            total_size += size

            page += '<td style="text-align: right;">%sKB</td>' % Tools.formatter( line["Data_free"]/1024.0, "%0.1f" )
            total_data_free += line["Data_free"]

            page += "<td>%s</td>" % line["Collation"]
            #~ page += "<td>%s</td>" % line["Comment"]
            page += "</tr>"

        page += '<tr style="font-weight:bold">'
        page += "<td></td>"
        page += '<td style="text-align: right;">%s</td>' % total_rows
        page += "<td></td>"
        page += '<td style="text-align: right;">%sKB</td>' % Tools.formatter( total_size/1024.0, "%0.1f")
        page += '<td style="text-align: right;">%sKB</td>' % Tools.formatter( total_data_free/1024.0, "%0.1f" )
        page += "<td></td>"
        page += "</tr>"

        page += "</table>"
Ich komm zwar nicht auf exact die gleichen Werte wie phpMyAdmin, aber was sollts...

Verfasst: Montag 11. Juli 2005, 16:20
von jens
Ach verdammt!

Anscheinend hat bei MySQLdb v0.9.1 das connection-Objekt noch nicht die query()-Methode :(
Also muß ich doch wieder zurück zu meiner alten Variante...

Eine neuere Version von MySQLdb kann ich auch nicht so einfach "installieren" siehe: http://www.python-forum.de/viewtopic.php?t=3573

Verfasst: Donnerstag 14. Juli 2005, 11:52
von jens
Ha :lol: :D :o

Selbst mit der alten mySQLdb Version 0.9.1 kann man den cursor mit cursor = connection.cursor( MySQLdb.cursors.DictCursor ) erstellen!!!

Somit erhält man auch hier ein Dict statt ein Tuple zurück!

Drauf gestoßen bin ich wegen dem Listing: http://www.python-forum.de/viewtopic.php?p=15913#15913

Verfasst: Donnerstag 14. Juli 2005, 15:20
von XT@ngel
Hallo jens,
der Gast da oben war ich :D

Das wars was ich die eigentlich sagen wollte. Das selbe was in http://www.python-forum.de/viewtopic.php?p=15913#15913 steht findest Du auch in
http://www.python-forum.de/viewtopic.php?t=761

Hätte ich wohl besser erkären solln, sorry :roll:

mfG
Andreas