Komprimierte Datenbank...

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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...
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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)

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:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten