gui - datenbank (tabelle) thread2

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Hallo zusammen,


es ist mir nicht möglich eine weitere Antwort hier einzufügen (Browser bleibt hängen??):

http://www.python-forum.de/topic-3064.html

Vielleicht ist es eh übersichtlicher:


Inzwischen können auch Nullwerte behandelt werden. Wenn eine Datenbank mehr als eine Tabelle hat wird, wird ein Auswahlfenster angeboten.

Alle Tabellen die ein Feld für einen Primärschlüssel haben, der automatisch hochgezählt wird, sollten funktionieren.

Die drei Programme (Gui, Tablewrapper, mysqlDAO) können sicherlich noch ein "Codelifting" vertragen, aus Zeitgründen kann ich mich darum nicht so annehmen. Wer unglücklich formulierte Anweisungen, Schleifen usw. findet, soll es mir bitte mitteilen.

Im mysqlDAO ist es mir leider noch nicht gelungen alle Funktionen, so umzuschreiben, dass im execute die fertige SQL Anweisung übergeben wird.

Welche Troubles ich damals hatte, weiss ich nicht mehr so genau,.....
auch das wird sich noch klären.

Vielen Dank im Voraus für jeden konstruktiven Beitrag bzw. Kommentar.

Liebe Grüße

rolgal_reloaded

LodgeIt Snippet 1
LodgeIt Snippet 2
LodgeIt Snippet 3

Edit (Leonidas): Code ins LodgeIt ausgelagert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

rolgal_reloaded hat geschrieben:es ist mir nicht möglich eine weitere Antwort hier einzufügen (Browser bleibt hängen??):

http://www.python-forum.de/topic-3064.html
Ist ein bekannter Fehler, bitte das nächste mal LodgeIt verwenden.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich wollte das gleich mal ausprobieren...

* Als erstes wuste ich nicht wie man die Dateien benennen muß.
* Die Einrückung stimmt teilweise nicht. Sollte immer 4 Zeichen sein.
* Die DB Typen PgSQL und XML sind doch gar nicht vorhanden, oder wo sind die Dateien pgsqlDAO und xmlDAO ? Ich hab mal ein raise NotImplementedError() eingefügt.

Dann beim starten ein Traceback:
Traceback (most recent call last):
File "gui.py", line 508, in ?
hf=HauptFenster()
File "gui.py", line 178, in __init__
self.db_tables=self.tablewrapper.getTableNameList()
File "D:\Python\DB GUI\tableWrapper.py", line 33, in getTableNameList
return self.dbWrapper.getTableNameList()
File "D:\Python\DB GUI\mysqlDAO.py", line 38, in getTableNameList
cursor=self.conn.cursor()
AttributeError: MySqlDAO instance has no attribute 'conn'
Das liegt wahrscheinlich daran, das die DB Zugangsdaten nicht stimmen ;)
Du fängst zwar den Fehler ab, machst aber nichts, außer den Fehler auszugeben.
Dumm finde ich dabei auch, das die DB-Zugangsdaten so "versteckt" sind...
Das hab ich geändert, in dem ich oben in der gui.py das eingefügt hab:

Code: Alles auswählen

db_type = "MySQL"
db_host = "localhost"
db_user = "UserName"
db_name = "DatabaseName"
db_pass = "Password"
Natürlich hab ich die connect Zeile angepasst.

Zur GUI (Ich hab von TK keine Ahnung):
* Wenn man nicht auf "Prog. Beenden" Button klickt, sondern einfach nur das Fenster schließt, läuft die Anwendung weiter.
* Generell finde ich die Fenster zu klein gewählt. Man kann sie leider auch nicht mit der Maus vergrößern :(
* Das mit dem sortieren ist nett, aber man kommt nicht sofort drauf, wie es funktioniert. Das sollte besser angeordnet sein. Vielleicht besser mit einer Drop-DownListe.
* Im Bearbeitungsfenster ist leider der "Eintragen" Button fest von der höher positioniert. Wenn es zu viele Einträge gibt, überdeckt er ein Eingabefeld. Ich hab den Button auch mal umbenannt in "Neu eintragen" und "Änderungen Speichern"
* "Prog. Beenden" war zu schmal
* Was macht der Button "Alle Daten" ?
* Schön wäre es, wenn die Daten in einer Tabelle gezeigt werden. Ich hab aber auch so eine Lösung: ljust(). Ich hab mal list_data() modifiziert. Nun kommen solche Sachen raus:

Code: Alles auswählen

0 | managePages     | core         | This group is able to add/edit/delete pages.       | None | None | None
0 | manageStyles    | core         | This group is able to add/edit/delete stylesheets. | None | None | None
0 | manageTemplates | core         | This group is able to add/edit/delete templates.   | None | None | None
0 | admin           | user-Defined | Administratoren  
Leider ist aber die Schrift im TK Fenster nicht proportional. Aber ich weiß nicht wie man den Schriftart ändern kann.

Hier meine neuen Versionenen:

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

@jens

Zunächst nur eine kurze Antwort.
Ursprüunglich lief das ganze nur mit MySQL, jetzt bietet es die Möglichkeit auch mit anderen DB zu arbeiten. Ich selbst habe aber kein interesse xmlDAO oder etwas anderes zu entwickeln.
Das war ein Vorschlag von tabellar, das Programm so ändern, dass das grundlegend möglich wird.

LG

rolgal_reloaded
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

jens hat geschrieben:Ich wollte das gleich mal ausprobieren...

* Als erstes wuste ich nicht wie man die Dateien benennen muß.
* Die Einrückung stimmt teilweise nicht. Sollte immer 4 Zeichen sein.
* Die DB Typen PgSQL und XML sind doch gar nicht vorhanden, oder wo sind die Dateien pgsqlDAO und xmlDAO ? Ich hab mal ein raise NotImplementedError() eingefügt.
Zur Einrückung: sorry for that, aber warum das passiert ist, weiss ich nicht. Ich habe es selbstverständlich vorher überprüft, da hat alles noch gepasst.

Zur Sache mit den DB Typen habe ich dir schon oben geantwortet.
Den Error zu implementieren ist sicher eine gute Sache.
Dann beim starten ein Traceback:
Traceback (most recent call last):
File "gui.py", line 508, in ?
hf=HauptFenster()
File "gui.py", line 178, in __init__
self.db_tables=self.tablewrapper.getTableNameList()
File "D:\Python\DB GUI\tableWrapper.py", line 33, in getTableNameList
return self.dbWrapper.getTableNameList()
File "D:\Python\DB GUI\mysqlDAO.py", line 38, in getTableNameList
cursor=self.conn.cursor()
AttributeError: MySqlDAO instance has no attribute 'conn'


Das liegt wahrscheinlich daran, das die DB Zugangsdaten nicht stimmen ;)
Du fängst zwar den Fehler ab, machst aber nichts, außer den Fehler auszugeben.
Dumm finde ich dabei auch, das die DB-Zugangsdaten so "versteckt" sind...
Das hab ich geändert, in dem ich oben in der gui.py das eingefügt hab:

Code: Alles auswählen

db_type = "MySQL"
db_host = "localhost"
db_user = "UserName"
db_name = "DatabaseName"
db_pass = "Password"
Natürlich hab ich die connect Zeile angepasst.
Ups, ich habe meine konkreten Angaben drin gelassen, das habe ich übersehen.
Der Konsequenz hier die Zugangsdaten als globale Variablen zu setzen kann ich nicht folgen. Ich finde es nicht einmal als Übergangslösung geeignet.
Natürlich fehlt hier noch ein Programm, das wie auch immer in einer Gui, alle DB anbietet und die ausgewählten dann mit den entsrpechenden Werten an den Konstruktor der Gui übergeben wird.

Zur GUI (Ich hab von TK keine Ahnung):
* Wenn man nicht auf "Prog. Beenden" Button klickt, sondern einfach nur das Fenster schließt, läuft die Anwendung weiter.
* Generell finde ich die Fenster zu klein gewählt. Man kann sie leider auch nicht mit der Maus vergrößern :(
* Das mit dem sortieren ist nett, aber man kommt nicht sofort drauf, wie es funktioniert. Das sollte besser angeordnet sein. Vielleicht besser mit einer Drop-DownListe.
* Im Bearbeitungsfenster ist leider der "Eintragen" Button fest von der höher positioniert. Wenn es zu viele Einträge gibt, überdeckt er ein Eingabefeld. Ich hab den Button auch mal umbenannt in "Neu eintragen" und "Änderungen Speichern"
* "Prog. Beenden" war zu schmal
* Was macht der Button "Alle Daten" ?
Das manches unuzreichend dargestellt wird, wie z.b. der Button "Prog. beenden" liegt wohl an unterschiedlichen Systemeinstellungen.
Mit der Maus soll es nicht vergrößert werden können, das war Absicht.
Warum eigentlich...., hm.....ich lass es dich umgehend wissen, wenn es mir wieder eingefallen ist, ggg.
Der Button "Alle Daten", zeigt im Hauptfenster alle Datensätze an, sinnvoll z. B. nach einer Suchanfrage - Ergebnis waren 2,3 Datensätze - dann willst du wieder zur Übersicht zurück.


* Schön wäre es, wenn die Daten in einer Tabelle gezeigt werden. Ich hab aber auch so eine Lösung: ljust(). Ich hab mal list_data() modifiziert. Nun kommen solche Sachen raus:

Code: Alles auswählen

0 | managePages     | core         | This group is able to add/edit/delete pages.       | None | None | None
0 | manageStyles    | core         | This group is able to add/edit/delete stylesheets. | None | None | None
0 | manageTemplates | core         | This group is able to add/edit/delete templates.   | None | None | None
0 | admin           | user-Defined | Administratoren  
Leider ist aber die Schrift im TK Fenster nicht proportional. Aber ich weiß nicht wie man den Schriftart ändern kann.
Schön wäre viel,....im Ernst: du hast natürlich Recht, ich hatte einfach noch keine Zeit mich damit zu beschäftigen.
Inzwischen ist es eh viel mehr was es mal sein sollte.
Die Aufgabe, die ich mir selbst gestellt hatte: Eine Gui für einfache Tabellenzugriffe, -operationen einer MySQL Datenbank.
Danke für deine Vorschläge, finde toll wie man das miteinander vergleichen kann.

Liebe Grüße

rolgal_reloaded
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

rolgal_reloaded hat geschrieben:
AttributeError: MySqlDAO instance has no attribute 'conn'
...
Das liegt wahrscheinlich daran, das die DB Zugangsdaten nicht stimmen ;)
Ups, ich habe meine konkreten Angaben drin gelassen, das habe ich übersehen.
Genau aus dem Grund hab ich einen Lokalen MySQL Server bei dem es so eingerichtet ist, das es mit den Daten klappt:

Code: Alles auswählen

db_type = "MySQL"
db_host = "localhost"
db_user = "UserName"
db_name = "DatabaseName"
db_pass = "Password"
:lol:
rolgal_reloaded hat geschrieben:Der Konsequenz hier die Zugangsdaten als globale Variablen zu setzen kann ich nicht folgen. Ich finde es nicht einmal als Übergangslösung geeignet.
Natürlich fehlt hier noch ein Programm, das wie auch immer in einer Gui, alle DB anbietet und die ausgewählten dann mit den entsrpechenden Werten an den Konstruktor der Gui übergeben wird.
Klar sind globale Variablen zu vermeiden, aber so können die Daten ganz oben im Sourcecode stehen und jeder sieht es direkt. Ist IMHO besser, als wenn die Daten irgendwo im Sourcecode versteckt sind!

Vielleicht sollte man hier eine kleine Verwaltung aufbauen. Ein Fenster wo man die DB-Daten eingeben kann und diese werden dann in einer INI Datei mit einem Namen gespeichert.
Beim nächsten Aufruf kann man dann die DB-Daten per Namen auswählen oder neue Daten hinterlegen...
rolgal_reloaded hat geschrieben:Mit der Maus soll es nicht vergrößert werden können, das war Absicht.
Warum eigentlich...., hm.....ich lass es dich umgehend wissen, wenn es mir wieder eingefallen ist, ggg.
Das würde ich auch gern wissen ;) Du solltest dir mal Textdaten holen, die viele Einträge in der DB haben... z.B. ein SQL-Dump von einem phpBB oder so... Dann wirst du schnell sehen, das ein größeres Fenster besser ist ;)


rolgal_reloaded hat geschrieben:
* Schön wäre es, wenn die Daten in einer Tabelle gezeigt werden. Ich hab aber auch so eine Lösung: ljust(). Ich hab mal list_data() modifiziert. ...
Schön wäre viel,....im Ernst: du hast natürlich Recht, ich hatte einfach noch keine Zeit mich damit zu beschäftigen.
Wie geschrieben mußt du nur die passende Schriftart auswählen und dann hätte man erstmal ein wenig Übersicht...
Auf langer Sich gesehen wäre es allerdings cool, wenn eine Tabelle genutzt werden würde. Noch viel cooler wäre es, wenn man dann in jeder Zelle den Inhalt direkt ändern könnte! Aber ich weiß nicht ob das mit TK möglich ist...
rolgal_reloaded hat geschrieben:Inzwischen ist es eh viel mehr was es mal sein sollte.
Die Aufgabe, die ich mir selbst gestellt hatte: Eine Gui für einfache Tabellenzugriffe, -operationen einer MySQL Datenbank.
Ja, das kommt oft vor, das Projekte größer werden ;) Also ich finde das kleine Mini-Tool recht praktisch... Für mich selber, wenn kein phpMyAdmin vorhanden ist und ich gern an den PyLucid SQL-Tabellen rumfummeln möchte...
Allerdings fehlt an dem Tool noch so einiges... Wobei ich IMHO erst dann zufrieden wäre, wenn es alles was phpMyAdmin kann implementiert ist :lol: Aber da hast du bestimmt keine Lust zu ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

hi,
bei der Code Ausfuehrung bekomme ich folgende Fehlermeldung

Code: Alles auswählen

Connect Error:
	Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Please check you connection settings in gui.py!
was ist dabei das Problem?

Gruss
pyStyler
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Das ist IMHO der Fall, wenn der SQL-Server überhaupt nicht läuft...

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

Deine Zugangsdaten sind falsch, hast du überhaupt einen MySQL-Server laufen?

@rolgal_reloaded: Warum hast du da so unheimlich viele Leerzeilen? Die helfen nicht der Übersichtlichtkeit, sie verdünnen nur den Code so stark, dass man viel öfter unnötig scrollen muss.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

Leonidas hat geschrieben:Deine Zugangsdaten sind falsch, hast du überhaupt einen MySQL-Server laufen?
nein bis jetzt noch nicht gebraucht :oops:
Aber erzaehl mal mehr bitte.
Zuletzt geändert von pyStyler am Dienstag 14. November 2006, 18:34, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

pyStyler hat geschrieben:nein bis jetzt noch nicht gebraucht :oops:
Aber erzhl mal mehr bitte.
Naja, rolgal_reloadeds Programm verwaltet Datenbanken. Wenn du keine Datenbank hast, wird dir rolgal_reloadeds Programm auch nicht so wahnsinnig viel bringen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

was die Software leisten soll, ist mir schon klar.
Unklar dabei ist, die Einrichtung der MySQL Datenbank-server!
Ich will die Software auch mal getesten haben, da ich in naher Zukunft mit MySQL zutun haben werde.

Danke&Gruss
pyStyler
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Dann kannst du hier nachlesen http://mysql.org/doc/ wie man mysql installiert und benutzt
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

@pyStyler: Wenn du unter Windows arbeitest, kannst du es mal mit dem MySQL Package v1.1 für PyLucid probieren.
Dann kannst du einen MySQL Server ohne großartige Installation starten.

Mehr Infos: http://pylucid.htfx.eu/index.py/PyLucidStandalone/

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

@jens:

Es gibt Dinge zu denen ich Lust habe und solche zu denen ich zwar Lust hätte aber keine Zeit. (bezieht sich auf deinen letzten Satz)

In erster Linie bin ich Gitarrist, Komponist, Lehrer für beides und auch für ein paar Informatikstunden.

Programmieren ist ein Hobby von mir, es interessiert und fasziniert mich. Es ist schwierig das in einem sinnvollen Ausmaß neben meiner anderen Tätigkeit auszuüben.

Bei diesem Programm würde ich es toll finden, wenn sich eine dauerhafte eine Projektarbeit entwickeln würde. Das ganze allein kann ich nicht weiterentwickeln.
Ausserdem habe ich ja einiges anderes in Arbeit, das dringender meine Betreuung braucht, weil ich dieses Programme selber brauche, ggg.

Jeder übernimmt dabei (bei hier diskutiertem Programm) konkrete Aufgaben. Die Vorraussetzungen dafür bietet der Code, anders gesagt: die Qualität ist hoch genug: die einzelnen Teile sind dafür allgemein genug programmiert. Bilde ich mir jetzt halt mal ein.

@Leonidas
Ich finde Leerzeilen angenehm, aber wahrscheinlich habe ich da und dort übertrieben. Gibst mir mal ein paar konkrete Lines, wo du es besonders schlecht findest, dann kann ich leichter eine Vorstellung von einem besseren Gesamtbild bekommen.

Liebe Grüße

rolgal_reloaded
tabellar
User
Beiträge: 186
Registriert: Mittwoch 4. September 2002, 15:28

jens hat geschrieben:Ich wollte das gleich mal ausprobieren...

* Als erstes wuste ich nicht wie man die Dateien benennen muß.
* Die Einrückung stimmt teilweise nicht. Sollte immer 4 Zeichen sein.
* Die DB Typen PgSQL und XML sind doch gar nicht vorhanden, oder wo sind die Dateien pgsqlDAO und xmlDAO ? Ich hab mal ein raise NotImplementedError() eingefügt.

...
Hier ist der Zusammenhang mit dem dazugehörigen Thread

:wink:

Tabellar
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

rolgal_reloaded hat geschrieben:Ich finde Leerzeilen angenehm, aber wahrscheinlich habe ich da und dort übertrieben. Gibst mir mal ein paar konkrete Lines, wo du es besonders schlecht findest, dann kann ich leichter eine Vorstellung von einem besseren Gesamtbild bekommen.
Ich sage ja nichts gegen Leerzeilen generell - natürlich sind sie wichtig. Aber nur in Maßen.
Snippet 1:
  • 9-11
  • 14-15
  • 25
  • 30
  • 35
  • 37
  • 59 (die Funktion ist übrigens nicht PEP8 kompatibel)
  • 67
  • 79
  • 81
  • 83
  • 85
  • hier LC hinsetzen
  • ...
  • self.lust = False
Für die anderen Snippets habe ich keine lust, aber du siehst, dass ich zum Beispiel in den Funktionen die erste Leerzeile generell wegstreichen würde, und auch drei oder drei Leerzeilen hintereinander finde ich überflüssig.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

@Leonidas

Ich wollte dir ja nicht unterstellen, dass du grundsätzlich was gegen Leerzeichen hast.

Natürlich habe ich mir auch nicht erwartet, dass du alle 3 Programme durchforstet.

Auf jeden Fall danke für die Lines, ich werde mir das in Ruhe ansehen.

Warum ist die Funktion nicht PEP kompatibel, wegen dem "\"?

LG

rolgal_reloaded
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

rolgal_reloaded hat geschrieben:Warum ist die Funktion nicht PEP kompatibel, wegen dem ""?
Wegen dem fehlenden Leerzeichen um die Operatoren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten