mySQL Tabellen "Überhang" ermitteln...

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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?
Zuletzt geändert von jens am Montag 11. Juli 2005, 09:59, insgesamt 1-mal geändert.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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 :(

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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
Zuletzt geändert von jens am Donnerstag 28. Juli 2005, 14:19, insgesamt 1-mal geändert.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
XT@ngel
User
Beiträge: 255
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

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
Antworten