Posts mit dem Label MySQL werden angezeigt. Alle Posts anzeigen
Posts mit dem Label MySQL werden angezeigt. Alle Posts anzeigen

Dienstag, 7. Oktober 2008

Open-Source Bug-Tracker - Mantis

Auf der langen Suche nach einem einfach zu installierenden und vorallem Ressourcen sparenden Bugtracker bin ich auf "Mantis" gestoßen. Dieser bietet alles was man braucht, ohne viel Schnickschnack und aufwendiges Design, aber mit sehr guter Funktionalität.

http://www.mantisbt.org/

Mittwoch, 10. September 2008

Ein Adressbuch mit "pickle"

Nach meinem erstem Projekt, welches mich in der Lernkurve doch sehr vorangebracht habe ich nun ein weiteres aus dem Projektideenfundus des Pythonwikis angestrebt und mich daran versucht.

Zunächst möchte ich ein Adressbuch auf Dateiebene, also ohne eine SQL-Datenbank realisieren bis ich so weit bin, dass ich auch das ohne Probleme hinbekommen würde. Für die Speicherung benutze ich "pickle", ein Modul, welches Daten sequentiell in eine normale Textdatei schreibt, damit es möglich ist nach dem Auslesen dieser Objekte, Variablen etc. in der gleichen Form wieder zu erhalten, ohne diese noch einmal neu deklarieren, oder füllen zu müssen.

Der erste Entwurf ist ein Versuch OOP zu schreiben. Ich hoffe es ist mir "banal" gelungen :) Die überarbeitete Version wird natürlich folgen.

import pickle

from sys import exit

class Person(object):
def __init__(self):
pass

def person_new():
person = Person()
person.vorname = raw_input('Vorname: ')
person.name = raw_input('Nachname: ')
person.geburtsort = raw_input('Geburtsort: ')
person.strasse = raw_input('Strasse: ')
person.hausnummer = raw_input('Hausnummer: ')
person.plz = raw_input('PLZ: ')
person.stadt = raw_input('Stadt: ')
return person

def person_add():
print personen

def person_show():
x = 0
for i in personen:
x+=1
print str(x) + ') ' + i

def dump_dict():
file = open('personen/daten.pk1', 'wb')
pickle.dump(personen, file)
file.close()

def load_dict():
file = open('personen/daten.pk1', 'rb')
personen = pickle.load(file)
file.close()
return personen

def menue_haupt():
print '1) Personen listen'
print '2) Person hinzufuegen'
print '3) Person loeschen'
print '4) Programm beenden'
i = int(raw_input('\nWaehlen Sie eine Option: '));print ''
return i

def menue_list():
i = raw_input('\nWelche Person?\n')
person = personen[i]
print 'Vorname: ' + person.vorname
print 'Nachname: ' + person.name
print 'Gebursort: ' + person.geburtsort
print 'Strasse: ' + person.strasse
print 'Hausnummer: ' + str(person.hausnummer)
print 'PLZ: ' + str(person.plz)
print 'Stadt: ' + person.stadt

def menue_delete():
i = raw_input('\nWelche Person moechten Sie loeschen?\n')
del personen[i]
dump_dict()

## Wieso kann `break` nicht ausgelagert werden?

def main():
while True:
i = menue_haupt()
if i == 1:
while True:
person_show()
menue_list()
i = int(raw_input('\n1) Menue\n2) Nochmal\n'))
if i == 1:
break
elif i == 2:
person_add()
i = int(raw_input('\n1) Menue\n2) Nochmal\n'))
if i == 1:
break
elif i == 3:
while True:
person_show()
menue_delete()
i = int(raw_input('\n1) Menue\n2) Nochmal\n'))
if i == 1:
break
elif i == 4:
exit()

personen = load_dict()
main()

Freitag, 29. August 2008

Datenbankabfrage über mehrere Tabelle ohne Joins

Nach mehreren Stunden herumprobieren habe ich endlich einen Befehl gefunden, der mein Problem löst. Eigentlich sehr einfach, aber finden muss man ihn erst einmal :)

Ich spreche vom UNION-Befehl.

Problem: Datenbankabfrage über mehrere gleich aufgebaute Tabellen, zum einen um Übersicht zu gewähren und zum anderen, weil in Zukunft enorm viele Datensätze aufgenommen werden, welche in einer Tabelle zu einem Wust von Daten führen würden.

Ich habe mehrere Befehle und Sortiermethoden ausprobiert, z.B. die einzelnen Abfrage-Arrays nach den Abfragen zu verketten, um die Arrays selber zu ordnen nur keine der Möglichkeiten war zufriedenstellend.

Der UNION-Befehl machte alles sehr einfach und mich glücklich :)

Beispiel: Alle Datensätze sollen abgefragt werden

Tabelle abc
Tabelle def

(SELECT * FROM abc) UNION (SELECT * FROM def)