Seite 1 von 1

Komprimierte Datenbank...

Verfasst: Dienstag 3. Mai 2005, 19:46
von jens
Ich möchte eine Hilfedatenbank erstellen... Zu jedem Python-Befehl möchte ich den help()-Text abspeichern...

Zuerst habe ich es mit anydbm gemacht. Dabei habe ich die Hilfetexte mit zlib komprimiert...

Das doofe ist aber, das eine erstellte Datenbankdatei mit Windows/Python 2.4 nicht mit Linux/Python 2.1 lesbar war...

Nun möchte ich es direkt in die SQL Datenbank schreiben.
Ich habe eine einfache Tabelle dafür erstellt:

Code: Alles auswählen

CREATE TABLE helpdata (
token varchar(50),
help BLOB );
token ist der Python-Befehl und help die Hilfstexte.

Bei der SQL-Datenbank gibt es mit myisampack eigentlich die Möglichkeit eine Komprimierung einzuschalten... Aber erstens drüfte es beim Webhoster ohne shell nicht gehen und zweitens kann man die komp. DB nicht mehr erweitern...

Also könnte ich wieder die Hilfstexte mit zLIB vorher komprimieren und in die Datenbank schreiben... Aber wie geht das???

Code: Alles auswählen

        SQLcommand  = "INSERT INTO "
        SQLcommand += TableName
        SQLcommand += " (token,help) "
        SQLcommand += "VALUES (%(key)s,%(data)s);" % {
                "key" : key,
                "data" : zlib.compress( value )
            }
So geht's jedenfalls nicht :(

Verfasst: Dienstag 3. Mai 2005, 20:13
von Leonidas
Vielleicht reicht ja ein CLOB oder auch ein String?

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*-

import zlib, binascii

# erstmal komplimierbaren string erstellen
wide = 100 * 'a'
print wide

# dann packen, mit zlib
short = zlib.compress(wide, 9)
print short

# dann in ascii konvertieren mit UUEncode
uu = binascii.b2a_uu(short)
print uu
# es geht aber auch base64 oder quoted printable

# jetzt uu in SQL einbauen

# und hier nochmal entpacken
print zlib.decompress(binascii.a2b_uu(uu))
Inwiestark sich das encoden nach ASCII negativ auf die Kompression auswirkt, kann ich dir nicht sagen...

Verfasst: Dienstag 3. Mai 2005, 22:58
von BlackJack
@jens: Das Problem ist, das die komprimierten Daten beliebige Bytes enthalten können, unter anderem eine schliessende Klammer und andere Sachen die deine SQL Anweisung ungültig machen können.

Das Thema hatten wir doch gerade: Du musst das Modul für die Datenbankanbindung die SQL Anweisung formatieren lassen und es nicht selbst tun. Für genau solche Fälle ist diese Funktionalität gedacht.

Verfasst: Mittwoch 4. Mai 2005, 06:14
von jens
BlackJack hat geschrieben:Das Thema hatten wir doch gerade: Du musst das Modul für die Datenbankanbindung die SQL Anweisung formatieren lassen
Ja stimmt :oops:

Ich hab jetzt mal nach eine Doku gesucht, aber nur das gefunden:
http://dustman.net/andy/python/python-and-mysql

So funktioniert es jetzt:

Code: Alles auswählen

SQLcommand  = "INSERT INTO "
SQLcommand += TableName
SQLcommand += " (token,help) "
SQLcommand += "VALUES (%(key)s,%(data)s);"

SQLdata = {
    "key" : key,
    "data" : zlib.compress( value )
}

db.execute( SQLcommand, SQLdata )
(Meine SQL-Klasse muß ich allerdings noch ändern)

Verfasst: Mittwoch 4. Mai 2005, 07:11
von jens
Ein erstet Ergebniss kann mann hier sehen:

http://www.jensdiemer.de/Programmieren/ ... nu.py.html

Wenn man auf die blau makierten Befehle/Module/etc. klickt, öffnet sich ein Fenster mit den Hilfstext.

Es sind allerdings mehr Wörter blau, als wirklich vorhanden sind... Welche aber gehen sind z.B. re, os, sys, SQL