#!/usr/bin/env python import MySQLdb print 'Content-Type: text/html' print print '<html><head><title>Books</title></head>' print '<body>' print '<h1>Books</h1>' print '<ul>' connection = MySQLdb.connect(user='me', passwd='letmein', db='my_db') cursor = connection.cursor() cursor.execute(“SELECT name FROM books ORDER BY pub_date DESC LIMIT 10”) for row in cursor.fetchall(): print '<li>%s</li>' % row[0] print '</ul>' print '</body></html>' connection.close()
I saved it as test.cgi to my web server. I run it by http://www.mysite.com/test.cgi unsuccessfully
Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request.
How can you solve the problem?
[edit] after the first answer
- test.cgi is executable (I run $ chmod +x test.cgi)
- I use Apache.
- I have this in .bashrc export PATH=${PATH}:~/bin
- Python module MySQLdb is installed.
- The code does not have smart quotes.
[edit] after the second answer
you’re getting that error because you haven’t installed the MySQLdb module that Python needs to talk to a MySQL database
I installed MySQLdb to my system. The module works, since I can import them. However, I still get the same error whet I go to the http://www.[mysite].com/test.cgi.
[edit]
I am not sure about the questions
Are the connect() parameters correct? Is MySQL running on localhost at the default port?
I run MySQL on my server. Is the question about the connect() parameters relevant here?
Is the SELECT statement correct?
You mean whether I have my SQL statements such as SELECT statement correct? I have not used any SQL queries yet. Do I need them here?
Any number of issues can cause the error you are seeing:
test.cgiexecutable (chmod 755) on the server?test.cgidesignated as a ScriptAlias location or have the ExecCGI option enabled (or equivalent if you’re not using Apache)?pythonin the systemPATHor in thePATHin the Web server’s startup environment?connect()parameters correct? Is MySQL running on localhost at the default port?SELECTstatement correct?If you’re sure that
pythonis found (test using the simplest possible script or by logging into the Web server if you can and typingwhich python) then you can get much better debug output by adding the following to the top of your script just below the shebang:More details: http://docs.python.org/library/cgitb.html
Additionally, if you have shell access to the Web server, try running python and just typing:
If the command returns with no error, you have your answer for #4 above. If an error is printed, you will need to get MySQLdb installed into the Web server’s Python installation.
EDIT: Looking more closely at the top of your question, I see that the code was scraped from an illustrative example at the very beginning of the Django Book. As such, I might expand #5 above to include the caveat that, of course, the requisite database, tables, user, and permissions need to be set up on the MySQL installation available to the Web server.