Datenbankverbindung zu postgresql in mehreren Skripten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
bernie
User
Beiträge: 1
Registriert: Mittwoch 14. März 2012, 22:36

Mittwoch 14. März 2012, 23:00

Hallo,

ich mach gerade meine ersten Versuche in python. Ich möchte mit einem Python-Projekt eine postgresql-Datenbank steuern, so etwa nach dem folgenden Python-Skript, irgendwann auch mit GUI:

Code: Alles auswählen

#!/usr/bin/python3
#coding=utf8

import postgresql
import getpass
import tkinter
import sys

pw=getpass.getpass("Passwort: ")
db = postgresql.open(user = 'postgres', password = pw, database = 'Praxisverwaltung', port = 5432)
liste = (db.prepare("SELECT id||' '||nachname||' '||vorname, strasse FROM klientenmodul WHERE behandlung = true ORDER BY id ASC"))

main = tkinter.Tk()
fr = tkinter.Frame(main, height = 100, width = 300, bg="#FFFFFF", bd=10)
fr.pack()

mBar = tkinter.Menu(main)
mFile = tkinter.Menu(mBar)
mFile.add_command(label = "Neu")
mBar.add_cascade(label = "Datei", menu=mFile)
main["menu"] = mBar

label1 = tkinter.Label(main, text='Daten', bg = "#AFFFFF", width=60, height=5)
label1.pack()
li = tkinter.Listbox(main, width = 50, height=10, bg="#AAAAAA", font=('Ubuntu', 20))
for item in liste:
    li.insert("end", item)
li.pack()

def ende():
    sys.exit()

button = tkinter.Button(main, text="Ende", command = ende)
button.pack()

main.mainloop()

db.close()
Nun meine Frage, mit der ich mich schon länger beschäftige und einfach keine Idee für eine Lösung habe: Wie ist es möglich, die in diesem Skript aufgebaute Verbindung zur Datenbank in weiteren Sripten zu nutzen, ohne immer wieder eine Datenverbindung aufzubauen und das Passwort einzugeben, etwa für ein Skript, das die persönlichen Daten(z. B. Adressse) für einen ausgewählten Klienten ausgibt, oder das die Abrechnung steuert?

Ich hoffe, ich stelle keine zu banale Frage.
Besten Dank für Hilfestellungen und Ideen.

Gruß,

bernie
BlackJack

Donnerstag 15. März 2012, 00:09

@bernie: Das ist gar nicht möglich. Entweder Du hinterlegst das Passwort irgendwo, zum Beispiel in einer Konfigurationsdatei bei der Du darauf achtest, dass die Rechte auf Dateisystemebene so gesetzt sind, das da niemand rein schauen darf, der nicht sowieso das Passwort kennen dürfte/müsste, oder Du schreibst nicht für jede kleine Aktion ein eigenes Skript, sondern eine grössere Anwendung die mehr kann.

Die Ende Funktion ist übrigens überflüssig, weil Du da als `command`-Argument auch gleich `sys.exit` übergeben kannst. `sys.exit()` wiederum ist keine so gute Idee weil das an der Stelle das Programm tatsächlich mehr oder weniger *sofort* beendet, also ohne das eventueller Code nach dem Aufruf der Hauptschleife ausgeführt wird. An der Stelle sollte man besser die `destroy()`-Methode auf dem `Tk`-Exemplar aufrufen (lassen).
Antworten