Seite 1 von 1

mod_python: "Globale" SQL-Verbindung?

Verfasst: Mittwoch 12. Oktober 2005, 13:13
von henning
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?

Verfasst: Mittwoch 12. Oktober 2005, 14:04
von jens
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...

Verfasst: Mittwoch 12. Oktober 2005, 14:26
von henning
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?

Verfasst: Mittwoch 12. Oktober 2005, 14:53
von jens
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...

Verfasst: Mittwoch 12. Oktober 2005, 15:06
von henning
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.

Verfasst: Freitag 14. Oktober 2005, 14:35
von Leonidas
Das hätte ich vermutlich mit einer Borg-Klasse gemacht.

Verfasst: Samstag 15. Oktober 2005, 10:01
von _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?

Re: mod_python: "Globale" SQL-Verbindung?

Verfasst: Samstag 15. Oktober 2005, 10:28
von Leonidas
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.