我遇到了一些代码问题,尝试获取QUERY_STRING但是当我查看控制台中的错误时,它会返回内部错误500,这似乎是由行getReqStr = env_vars['QUERY_STRING']
引起的
有任何想法如何解决这个问题吗?
import MySQLdb
import cgi, cgitb
from urlparse import urlparse
def index(req):
req.add_common_vars()
env_vars = req.subprocess_env
getReqStr = env_vars['QUERY_STRING']
getReqArr = getReqStr.split('&')
getReqDict = {}
for item in getReqArr:
tempArr = item.split('=')
getReqDict[tempArr[0]] = tempArr[1]
dtbox = getReqDict['dt']
tmbox = getReqDict['tm']
con = MySQLdb.connect('localhost', 'root', '', 'mydb')
with con:
cur = con.cursor(MySQLdb.cursors.DictCursor)
st = "SELECT tmp, watts FROM currentcost WHERE dt ='" + dtbox + "' and tm like '" + tmbox + "%'"
cur.execute (s)
rows = cur.fetchall()
x=""
y=""
for row in rows:
x=x+row["watts"]+","
y=y+row["tmp"]+","
x="data:["+x+"]"
y="data:["+y+"]"
con.close()
req.write(st)
EDIT。
以下是我通过Chrome控制台回复的回复:
MOD_PYTHON ERRORProcessId:3424Interpreter:'127.0.1.1'ServerName:'127.0.1.1'DocumentRoot:'/ var / www'URI:'/ currentcost.py'Location:NoneDirectory:'/ var / www /'Filename:' /var/www/currentcost.py'PathInfo:''阶段:'PythonHandler'Handler:'mod_python.publisher'Traceback(最近一次调用最后一次):文件“/usr/lib/python2.7/dist-packages/mod_python/ importer.py“,第1537行,在HandlerDispatch中默认= default_handler,arg = req,silent = hlist.silent)文件”/usr/lib/python2.7/dist-packages/mod_python/importer.py“,第1229行,在_process_target result = _execute_target(config,req,object,arg)文件“/usr/lib/python2.7/dist-packages/mod_python/importer.py”,第1128行,在_execute_target结果=对象(arg)文件“/ usr /lib/python2.7/dist-packages/mod_python/publisher.py“,第204行,处理程序模块= page_cache [req]文件”/usr/lib/python2.7/dist-packages/mod_python/importer.py“ ,第1059行, getitem return import_module(req.filename)文件“/usr/lib/python2.7/dist-packages/mod_python/importer.py”,第296行,在import_module日志中,import_path)文件“/usr/lib/python2.7/ dist-packages / mod_python / importer.py“,第680行,在import_module execfile(文件,模块。 dict )文件”/var/www/currentcost.py“,第17行getReqStr = env_vars [' QUERY_STRING']'之后的网址? ^ SyntaxError:EOL扫描字符串文字时模块CACHE DETAILSccessed:Thu Sep 26 09:18:30 2013Generation:0_mp_545c0d0056a74a40503ad1da7dbb26e2 {FileName:'/ var / www / currentcost.py'实例:1 [IMPORT]生成:0 [ERROR]修改:Thu 9月26日09:10:57 2013}
答案 0 :(得分:2)
如果您使用的是mod_python
,则req.args可能包含您的所有数据。
您还可以使用req.parsed_uri[apache.URI_QUERY]
如果您需要处理GET和POST而不考虑它,那么最好使用与mod_python
捆绑在一起的FieldStorage类来解析它。应该是这样的:
from mod_python import util
getReqDict = util.FieldStorage(req)
dtbox = getReqDict['dt']
tmbox = getReqDict['tm']
作为对代码的额外观察:构建SQL查询的方式不安全且易受SQL injection攻击。 在传递给SQL查询之前不要忘记转义数据,或者使用query parameter binding(首选方法)。