mod_python: "Globale" SQL-Verbindung?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Moin!
Folgendes Problem: Wie mache ich meine SQL-Verbindung am elegantesten unter allen Modulen verfügbar?

Ich hatte sie bis jetzt immer brav als Paramter übergeben, aber langsam wird das unschön :-/

Macht es Sinn, die in einem extra Modul (das man dann z.B. globals.py nennen würde) abzulegen?
Diese Verbindung wird bis dato noch bei jedem request neu erzeugt, also müsste ich ja überall, wo ich das Modul nutze ein reload() ausführen, oder?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich hab das bei PyLucid so gemacht, das die SQL-Klasse immer als Parameter mitgegeben wird... Nebenbei werden aber auch noch weitere Klassen/Objekte mirgegeben, wie z.B. CGI-Daten, SessionHandling usw.

Das ganze steckt in einem Dict, das immer an __init__ übergeben wird. Jedes Modul kann sich dann das rauspicken, was es wirklich braucht...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Ist für die "normalen" Module bisher auch kein Problem gewesen.
Die Sache ist jetzt aber die, dass ich kleinere Module habe, die aber im Sinne der Anwendung keine Module sind (sprich nicht ein Forum, eine Gallery o.Ä. bereitstellen), sondern halt wiederum von den "normalen" Modulen nur eingebunden und genutzt werden.

Und die sollen nicht jedes mal den ganzen Quark weitergeben müssen.
Ich hab schon versucht, die SQL-Variable einfach direkt vom handler zu importieren, was leider auch nicht immer funktioniert, da dort manchmal gecachet wird (auch, wenn der handler sich selbst reloaded nachdem er sie sql-variable gesetzt hat).

Den Handler will ich aus den anderen Modulen heraus nicht extra reloaden müssen, das scheint mir umständlich und man vergisst es zu leicht.

Ich überlege gerade __import__ zu überschreiben, macht das evtl. Sinn?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich kann dir zwar nicht ganz folgen... aber:
henning hat geschrieben:Und die sollen nicht jedes mal den ganzen Quark weitergeben müssen.
Und warum nicht???
Ich hab's halt deswegen auch alles in ein Dict gepackt, dammit ich immer nur eine Sache übergeben muß und nicht alle möglichen Objekte, was mehr schreibarbeit ist und auch unflexibler... Denn das Dict, kann ich einfach erweitern mit einem neuen Objekt und alle "alten" Module funktionieren immer noch...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Warum mir das mit dem weitergeben nicht so passt ist schwer zu erklären ohne euch erstmal endlos mit code zuzubomben und mein gesamtes System zu erklären ,-)

Ich machs jetzt so, dass in dem handler-Modul in dem die Variable definiert wird eine Funktion existiert, die diese Variable zurück gibt.
Das scheint das Caching-Verhalten zu umgehen und ist auch IMHO nicht allzu unelegant.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Das hätte ich vermutlich mit einer Borg-Klasse gemacht.
Zuletzt geändert von Leonidas am Samstag 15. Oktober 2005, 10:24, insgesamt 1-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
_Henning

Das kenne ich, ich versteh aber nicht ganz, wie das das Modul-Caching-Problem umgeht?
Oder meinst du statt einem dict, ein Borg-Objekt u übergeben?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Du hast ja folgendes gefragt:
henning hat geschrieben:Wie mache ich meine SQL-Verbindung am elegantesten unter allen Modulen verfügbar?

Ich hatte sie bis jetzt immer brav als Paramter übergeben, aber langsam wird das unschön :-/
Und da dachte ich mir, wenn du eine Borg-Klasse erstellt, dieser die SQL-Verbindung übergibst, kannst du überall eine Borg-Klasse erstellen. Diese hat schon automatisch die SQL Verbindung, da sich ja alle Borg-Klassen einen Zustand teilen.

Oder es funktioniert gar nicht, ich habe es nicht getestet, das war nur so eine Idee.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten