2010-11-03 2 views
0

J'essaie d'apprendre à utiliser Python pour créer du contenu Web dynamique. Problème Je vais avoir la porte, cependant, quand j'essaye de faire une requête mySQL, absolument rien ne se passe. Il n'y a pas de message d'erreur ... il semble que le script s'arrête simplement lorsque j'importe le module qui permet la connexion à la base de données.script côté serveur pour les pages Web avec Python: rien ne se passe

Cela fait exactement ce que je m'attendais lorsque j'essaie de l'exécuter à partir de la ligne de commande.

#!/usr/bin/python 
print "Content-Type: text/xml" 
print 

#if I type, for example, print "<b>test</b>" here, it appears in the browser window 

#msql contains the credentials for connecting to database 
#it is NOT in public_html 
import msql 

#no print instructions after this point are followed 

connex=msql.msqlConn() 
db=msql.MySQLdb 
cursor=connex.cursor(db.cursors.DictCursor) 

cursor.execute("SELECT * FROM userActions") 
#run the query 

xmlOutput="" 

rows=cursor.fetchall() 
#output the results 
for row in rows: 
    xmlOutput+="<action>" 
    xmlOutput+="<actionId>"+str(row["actionId"])+"</actionId>" 
    xmlOutput+="<userId>"+str(row["userId"])+"</userId>" 
    xmlOutput+="<actText>"+str(row["action"])+"</actText>" 
    xmlOutput+="<date>"+str(row["dateStamp"])+"</date>" 
    xmlOutput+="</action>" 

xmlOutput="<list>"+xmlOutput+"</list>" 
print xmlOutput 

Ce serait mon premier coup de couteau à cela, il se simplement à la raison que cela devrait fonctionner. Cependant, je n'ai rien trouvé en ligne qui puisse suggérer le contraire.

+0

Construire XML (ou HTML) par concaténation de chaînes de caractères semble être une très mauvaise idée pour moi ... – delnan

+0

Quelle bibliothèque est-ce? msql? Jamais entendu parler. –

+0

Lorsque vous l'exécutez à partir de la ligne de commande, que se passe-t-il? Ma conjecture est que votre script reçoit une erreur à un moment donné et cela est envoyé à l'erreur standard, de sorte que vous ne le voyez pas dans le navigateur. Ajout temporaire de 'import sys; sys.stderr = sys.stdout' entraînerait également un message d'erreur dans le navigateur. – kindall

Répondre

1

Veuillez prendre 24h pour apprendre quelque chose comme Django. Django dispose d'un ORM et d'un sérialiseur XML qui vous facilitera la vie en vous garantissant un xml correct (et légal).

+0

OK, va chercher dans Django et pyodbc, au minimum. Le problème se révèle être que le module msql n'est pas trouvé lors de l'exécution via un navigateur (bien que ce soit lors de l'exécution via la ligne de commande). msql contient le code de connexion standard (dans un endroit où les informations d'identification ne sont pas visibles publiquement), et utilise à son tour la bibliothèque MySQLdb. – user473759

0

Vous pouvez activer retraçage cgi pour voir ce qui se passe:

import cgitb 
cgitb.enable() 

(je ne pense pas que cela cause votre problème, et les clients comprennent aussi bien \n mais il est préférable d'utiliser sys.write("...\r\n") au lieu de print à imprimer En-têtes HTTP)

Modifié: essayez d'ajouter Content-length: XXXX\r\n à l'en-tête.

Questions connexes