[Python-de] Re: letzte Rettung

Ralf Geschke ralf at kuerbis.org
Sat May 12 10:14:00 EDT 2001


> 1.) Eigentlich verstehe ich nicht, was die Datenbankverbindung mit der
> Programmiersprache zu tun hat.

Mit irgend einer Programmiersprache moechtest Du ja wohl auf die
Datenbank zugreifen...

> 2.) Wie persistent soll die Verbindung eigentlich sein? Soll die persistente
> Verbindung auch das Abschalten des Rechners ueberdauern?

Witzbold. 

> Wenn nicht, dann ist die Antwort auf die Ausgangsfrage einfach:
> Ja,
> denn dann brauche ich nur ein Programm, welches
> 1. immer laeuft, 2. Python unterstuetzt, 3. Datenbanken unterstuetzt
> --> Zope

> oder Apache + Zope oder IIS + Zope

> Apache + mod_perl oder Apache + mod_php ist auch nichts anderes als "Zope
> light".

Das ist Quatsch. Zope ist ein Application Server, mod_php oder 
mod_perl sind dies sicherlich nicht. 

Der Unterschied - so wie ich ihn nun verstanden habe - liegt
wohl in der Art des Interpreters. Wenn man auf der Kommandozeile
"python" eingibt, landet man genau darin und kommt nur mit explizitem
Druecken von Ctrl-D wieder raus. 

Wie bereits angegeben wurde, kann man also schreiben:

python
Python 1.5.2 (#1, Jul 29 2000, 14:28:37)  [GCC 2.95.2 19991024 (release)] on
linux2
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>> print "Hallo"
Hallo
>>> 
...und befindet sich nach wie vor im Interpreter. Importierte
Module bleiben erhalten usw.. 

Wenn ich das gleiche mit PHP versuche, also auf Kommando-Ebene
eingebe:
geschke at pdp:~ > php -q
<?php
print "Hallo\n";
?>
Hallo
geschke at pdp:~ > 

Der Ablauf: Nach php -q bin ich im Interpreter. Danach werden die
Kommandos eingegeben, aber in diesem Augenblick noch nicht
ausgefuehrt. Erst dann, wenn ich den Interpreter verlassen
moechte (bzw. muss), druecke ich Ctrl-D, woraufhin der eingegebene
Code (und zwar saemtlicher) ausgefuehrt wird, das "Hallo"
erscheint auf dem Bildschirm. 

Bei Perl ist der Ablauf vollkommen gleich, der Interpreter
muss explizit verlassen werden, damit der Code ausgefuehrt wird,
vorher geschieht nix. 

Vielleicht ist dies aus Python-Sicht weniger leicht vorstellbar,
aber das PHP-Modul im Apache macht nun nichts anderes, als dort
drin zu sein. Punkt. Erst wenn der Apache eine Datei mit der
richtigen Endung findet, uebergibt er den Code (bzw. das "Skript")
dem PHP-Interpreter. Dieser kompiliert ihn (seit PHP4), fuehrt ihn aus und
sendet die Ergebnisse zurueck an den Apache. Request fuer Request.
Zwischen den Requests wird weder PHP-Code ausgefuehrt noch existiert
ein globaler Namensraum fuer PHP-Code, noch bleibt mittels include
eingebundener PHP-Code im Apache. Das koennt Ihr mir nun glauben
oder nicht, aber genau so isses. ;-) 

Aus dieser Sicht betrachtet sind die persistenten Datenbank-
Verbindungen bei PHP tatsaechlich etwas Besonderes, weshalb 
sie auch durch spezielle Befehle (z.B. mysql_pconnect() statt
mysql_connect() ) initiiert werden muessen. Sie sind 
selbstverstaendlich nur bei mod_php moeglich, nicht in der CGI-
Variante. 

Da ich mir wie erwaehnt zugegebenermassen nicht vorstellen konnte,
dass es bei Python viel anders zugeht, hatte ich jene Schwierigkeiten,
die Vorgaenge hierbei zu verstehen. Ich hatte den Interpreter - kann
man diesen vielleicht "interaktiv" nennen? - nicht beruecksichtigt. 
Meines Erachtens ist somit dieser Interpreter-Typ _gemeinsam_ mit 
mod_python dafuer verantwortlich, dass persistente Datenbank-
Connections oder ein globaler Namensraum etc. bei mod_python-
Anwendungen existieren koennen.

Beste Gruesse,
   Ralf



More information about the Python-de mailing list