Seite 1 von 1

Anfänger braucht Hilfe...

Verfasst: Dienstag 6. November 2007, 21:54
von nemomuk
Hallo,

also: ich bin ganz neu bei Python und auch ganz neu bei SQL...

also ich hab schon folgendes gebastelt^^:

Code: Alles auswählen

#!/usr/bin/python
import cgi
print "Content-Type: text/html\n"

import _mysql
db=_mysql.connect("localhost","johannes","123345567","johannes")

try:
	cursor.execute( """SELECT 
					a 
					FROM test"""
				)
except:
	db.rollback() # transaktion aufheben
	raise
else:
	db.commit() # transaktion ende
r = db.use_result()
print r
ich habe hier einfach versucht meine bisherigen Programmierkenntnisse anzuwenden, nur leider funktioniert es nicht und ich komme auch mit dem englischen Turorial von sourgeforge nicht weiter...

Was ist hier falsch?
Oder kennt ihr vllt. ein möglichst deutschsprachiges Turorial, kann auch Englisch sein, das Schritt für Schritt einführt?

Danke!

EDIT by Gerold: Code in Code-Tags gesetzt -- beim nächsten Mal bitte selber machen. ;-)

Re: Anfänger braucht Hilfe...

Verfasst: Dienstag 6. November 2007, 21:59
von gerold
SchneiderWeisse hat geschrieben:Oder kennt ihr vllt. ein möglichst deutschsprachiges Turorial, kann auch Englisch sein, das Schritt für Schritt einführt?
Hallo SchneiderWeisse!

Willkommen im Python-Forum!

Über die Forensuche gefunden:
http://www.python-forum.de/topic-12351.html

mfg
Gerold
:-)

Verfasst: Mittwoch 7. November 2007, 16:22
von nemomuk
also ich habe mich heute nochmal mit all diesen Sachen auseinandergesetzt und komm leider nicht viel weiter, da er mir immer einen Internal Server Error anzeigt...

Code: Alles auswählen

#!/usr/bin/python
import cgi
print "Content-Type: text/html\n"

import _mysql
db = _mysql.connect("localhost","johannes","123123123","johannes")

#alles darüber funktioniert, ab der nächsten Zeile zeigt er mir jedes mal einen Fehler

cursor = db.cursor()

cursor.execute("SELECT a FROM test")


qwe = cursor.fetchone()
wer = cursor.fetchall() 
 
cursor.close()
db.close()
Problem: Leider steht es in jedem Beispiel aber so drin?! Wenn der Verbindung zur Datenbank schon nicht funktionieren würde, dann bekäme ich ja schon eine Fehlermeldung, oder? Also kanns an der nicht liegen... Weiter kenn ich mich leider nicht besser aus. Was mache ich falsch?

vllt. hilft ja ein errorlog:

Code: Alles auswählen

[Wed Nov 07 16:27:31 2007] [error] [client 1] PythonHandler mod_python.cgihandler: AttributeError: cursor
[Wed Nov 07 16:27:32 2007] [error] [client 1] PythonHandler mod_python.cgihandler: Traceback (most recent call last):
[Wed Nov 07 16:27:32 2007] [error] [client 1] PythonHandler mod_python.cgihandler: File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line 299, in HandlerDispatch\n result = object(req)
[Wed Nov 07 16:27:32 2007] [error] [client 1] PythonHandler mod_python.cgihandler: File "/usr/lib/python2.4/site-packages/mod_python/cgihandler.py", line 96, in handler\n imp.load_module(module_name, fd, path, desc)
[Wed Nov 07 16:27:32 2007] [error] [client 1] PythonHandler mod_python.cgihandler: File "/srv/www/vhosts/icoost.com/httpdocs/python.py", line 8, in ?\n cursor = db.cursor()
[Wed Nov 07 16:27:32 2007] [error] [client 1] PythonHandler mod_python.cgihandler: AttributeError: cursor 

Verfasst: Mittwoch 7. November 2007, 16:29
von Leonidas
Hast du Zugriff auf den `error_log` deines Webservers? Dort stehen die Fehlermeldungen drinnen, bei denen im Browser ein "Internal Server Error" steht.
Vermutlich liegt es daran, dass du unter Windows entwickelst mit DOS-Zeilenenden und dann das Skript zu deinem Server im Binärmodus hochlädst. Dann kann der Webserver die erste Zeile nicht lesen (wegen einem überflüssigem Carriage Return) und gibt einen Internal Server Error aus.

Verfasst: Mittwoch 7. November 2007, 16:31
von nemomuk
[Wed Nov 07 16:27:31 2007] [error] [client 1] PythonHandler mod_python.cgihandler: AttributeError: cursor
[Wed Nov 07 16:27:32 2007] [error] [client 1] PythonHandler mod_python.cgihandler: Traceback (most recent call last):
[Wed Nov 07 16:27:32 2007] [error] [client 1] PythonHandler mod_python.cgihandler: File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line 299, in HandlerDispatch\n result = object(req)
[Wed Nov 07 16:27:32 2007] [error] [client 1] PythonHandler mod_python.cgihandler: File "/usr/lib/python2.4/site-packages/mod_python/cgihandler.py", line 96, in handler\n imp.load_module(module_name, fd, path, desc)
[Wed Nov 07 16:27:32 2007] [error] [client 1] PythonHandler mod_python.cgihandler: File "/srv/www/vhosts/icoost.com/httpdocs/python.py", line 8, in ?\n cursor = db.cursor()
[Wed Nov 07 16:27:32 2007] [error] [client 1] PythonHandler mod_python.cgihandler: AttributeError: cursor

Nein, mein Server läuft auf SUSE mit Plesk...

Verfasst: Mittwoch 7. November 2007, 16:33
von Leonidas
Du nutzt mod_python! Das hast du nicht gesagt, denn:

mod_python muss weg. Das macht dir Probleme. Der einfachste Weg diese Probleme zu umgehen, ist mod_pyhton loszuwerden und CGIs wirklich durch den Webserver starten lassen.

Verfasst: Mittwoch 7. November 2007, 16:36
von nemomuk
ist ein Unterschied Zwischen Python und mod_python? War mir nicht klar, aber das kann ich leider nicht ändern, da der Server leider nur unter diesen Komponenten läuft...

Geht es denn so nicht?

Verfasst: Mittwoch 7. November 2007, 16:50
von nemomuk
scheint als ob ich es selbst geschafft hätte^^

Code: Alles auswählen

#!/usr/bin/python
import cgi
print "Content-Type: text/html\n"

import MySQLdb
connection = MySQLdb.connect(
	host="localhost",
	db="johannes",
	user="johannes",
	passwd="123123123")   

curser = connection.cursor()
curser.execute("SELECT a FROM test")
result = curser.fetchall()
connection.commit()       
connection.close()
print result
Muss ich die Connection jedes Mal closen oder kann ich die weiterbehalten, wie bei CGIs möglich ist?

Kann man am Code irgendwas verbessern?
#
Vielen Dank, bisher!

Verfasst: Mittwoch 7. November 2007, 17:15
von Leonidas
SchneiderWeisse hat geschrieben:ist ein Unterschied Zwischen Python und mod_python?
Das ist so als würde man fragen, ob es einen Unterschied zwischen PHP und Apache gibt..

Ja, der Unterschied ist dass Python (genauer CPython in dem Fall) ein Interpreter und mod_python nur die ziemlich ungelungene Integration von Python in den Apache Webserver ist. Aber Python kann man auf viele Weisen mit dem Webserver verbinden, nahezu jede ist besser als mod_python.