Corey Alexander
Corey Alexander

Reputation: 915

CherryPy and MySQL can't connect to the database

I have a CherryPy "site" set up under Apache with modwsgi. It works fine and I can return hello world messages no problem. The problem is when I try to connect to my MySQL database. Here is the code I'm using.

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)

Most of this was copied from the CherryPy site on setting up modwsgi, I just added the database stuff which I pieced together from various internet sources.

When I try to view the root page I get a 500 Internal Server Error. I can still get to the login page fine but so I'm pretty sure I'm messing up the database connection somehow.

Upvotes: 0

Views: 1722

Answers (1)

Felix
Felix

Reputation: 541

You have a bunch of errors, not related to CherryPy really.

def initServer():
    global db

db is not defined in the global scope. Try:

db = None
def initServer():
    global db

In addition, initServer() is never called to create the DB connection.

Another:

c = db.cursor()
c.execute('SELECT count(*) FROM Users')
result = cursor.fetchall()
cursor.close()

cursor is not defined. I think you mean c:

c = db.cursor()
c.execute('SELECT count(*) FROM Users')
result = c.fetchall()
c.close()

Upvotes: 1

Related Questions