我在Apache下用modwsgi建立了一个CherryPy“站点”。它工作正常,我可以回复你好世界消息没问题。问题是当我尝试连接到MySQL数据库时。这是我正在使用的代码。
import sys
sys.stdout = sys.stderr
import atexit
import threading
import cherrypy
import MySQLdb
cherrypy.config.update({'environment': 'embedded'})
if cherrypy.__version__.startswith('3.0') and cherrypy.engine.state == 0:
cherrypy.engine.start(blocking=False)
atexit.register(cherrypy.engine.stop)
def initServer():
global db
db=MySQLdb.connect(host="localhost", user="root",passwd="pass",db="Penguin")
class Login(object):
def index(self):
return 'Login Page'
index.exposed = True
class Root(object):
login = Login();
def index(self):
# Sample page that displays the number of records in "table"
# Open a cursor, using the DB connection for the current thread
c=db.cursor()
c.execute('SELECT count(*) FROM Users')
result=cursor.fetchall()
cursor.close()
return 'Help' + result
index.exposed = True
application = cherrypy.Application(Root(), script_name=None, config=None)
大部分内容是在设置modwsgi时从CherryPy网站复制的,我刚刚添加了数据库内容,我从各种互联网资源中拼凑起来。
当我尝试查看根页面时,我收到500内部服务器错误。我仍然可以很好地访问登录页面,但所以我很确定我在某种程度上弄乱了数据库连接。
答案 0 :(得分:1)
你有很多错误,真的与CherryPy无关。
def initServer():
global db
db
未在全局范围内定义。尝试:
db = None
def initServer():
global db
此外,永远不会调用initServer()
来创建数据库连接。
另:
c = db.cursor()
c.execute('SELECT count(*) FROM Users')
result = cursor.fetchall()
cursor.close()
cursor
未定义。我想你的意思是c
:
c = db.cursor()
c.execute('SELECT count(*) FROM Users')
result = c.fetchall()
c.close()