返回Python CGI MySQL脚本的输出

2 投票
1 回答
2664 浏览
提问于 2025-04-17 22:34

我刚开始学习Python和MySQL,这是我在Stack Overflow上的第一个问题。如果我遗漏了什么明显的东西,先说声抱歉。不过,我真的在问之前努力研究过这个问题。

我正在尝试学习Python、MySQL和CGI脚本的基础知识。为此,我在阅读一些教程,比如http://www.tutorialspoint.com/python/python_cgi_programming.htmhttp://www.tutorialspoint.com/python/python_database_access.htm等。

我想通过CURL GET或者Python Requests GET来调用一个测试服务器上的Python CGI脚本。这个Python CGI脚本会对本地的MySQL数据库进行读取操作,然后把结果返回给CURL或者Python Requests。

我创建的Python CGI脚本在远程测试服务器上能完美地将MySQL读取的数据输出到终端。但是,它却无法将这些输出返回给触发CGI脚本的CURL或Python Requests。

这是我拼凑出来的Python CGI脚本:

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > '%d'" % (1000)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Fetch all the rows in a list of lists.
   results = cursor.fetchall()
   for row in results:
      fname = row[0]
      lname = row[1]
      age = row[2]
      sex = row[3]
      income = row[4]
      # Now print fetched result
      print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
             (fname, lname, age, sex, income )
except:
   print "Error: unable to fetch data"

# disconnect from server
db.close()

我猜测我需要以某种方式将SQL查询的数据通过某种返回或输出语句传回Python或者请求的进程。但是,我尽力研究这个问题也没有找到解决办法。有人能指点我一下正确的方向吗?非常感谢任何帮助!

Marc :-)

1 个回答

1

首先,根据你提到的CGI教程,你需要输出你正在使用的内容类型:

print "Content-type: text/plain\r\n\r\n",

如果你没有在这里加上换行符,HTTP客户端会认为你的内容是头部的一部分,这样它们就会搞混,可能会以为你请求的文档是空的。

接下来,你需要一个CGI服务器。Python自带一个。把你的脚本放在一个叫做cgi-bin的子目录里,然后在上级目录运行这个命令:

python -m CGIHTTPServer

你调用的URL看起来会像这样:

curl http://localhost:8000/cgi-bin/cgitest.py

撰写回答