[mod_python] R.Geller: Frustrating problem

berth bert at tela.com
Mon Nov 8 11:14:29 EST 2004



--
Are you getting an error message?  I don't see a "commit()" in there, just
before the db.close(), insert a db.commit().
 
Bert Hughes



>>>>>>>>>>>>>>>>>>>>>>


Hello.
 
This is extremely weird. All my select statements work perfectly fine using
'userid', which is the value of a MarshalCookie decoded, as means to reference
a specific row (entry) in the table.
However, when using 'UPDATE' and trying to use %s with the variable 'userid',
it just doesn't WORK! I have been spending hours on this tonight, so I finally
decided to post on the mailing list with hopes someone would be able to help.
 
                cookie = Cookie.get_cookies(req, Cookie.MarshalCookie,
secret='rob3')
                if cookie.has_key('userid'):
                        uidcookie = cookie['userid']
                        userid = uidcookie.value
                fs = util.FieldStorage(req)
                name = fs.getfirst("name")
                email = fs.getfirst("email")
                db_connect.db_query_update("UPDATE users SET fname='%s',
email='%s' WHERE id = '%s'" % (name, email, id))

First I get the signed MarshalCookie. I assign the value of the 'userid'
cookie to 'userid'. Then I use fieldstorage to get the variables in POST, and
I am simply trying to update the corresponding user's row with his updated
information. (This is a profile/information page for my application)
 
db_query_update is a function in another module, db_connect, which I use to
execute queries. It looks like this:
 
def db_query_update(query):
        db = MySQLdb.connect(user='root', host='localhost', db='imagehost')
        c = db.cursor()
        c.execute(query)
        c.close()
        db.close()
 
 
 
It just won't execute the query properly! Strangely, select statements further
down work FINE, such as:
 
username = db_connect.db_query_select("SELECT username FROM users WHERE id =
%s" % userid)
 
db_query_select looks like:
 
def db_query_select(query):
        db = MySQLdb.connect(user='root', passwd='tux5098nyu',
host='localhost', db='imagehost')
        c = db.cursor()
        c.execute(query)
        results = c.fetchone()
        c.close()
        db.close()
        return results[0]
 
 
Oddly, If I manually put in an arbitrary existing value for id, such as 26, it
works perfectly fine...
 
You probably won't understand the context of my code, but here is the entire
editprofile function:
 
def editprofile(req):
        sess = Session.Session(req, secret='s3kr3t')
        sess.load()
        if sess.is_new():
                sess.delete()
                util.redirect(req, '/login')
        if not req.method == "POST":
                userid = getIDCookie(req)
                reload(profile)
                reload(db_connect)
                form = profile.FORM
                username = db_connect.db_query_select("SELECT username FROM
users WHERE id = %s" % userid)
                email = db_connect.db_query_select("SELECT email FROM users
WHERE id = %s" % userid)
                password = db_connect.db_query_select("SELECT password FROM
users WHERE id = %s" % userid)
                fname = db_connect.db_query_select("SELECT fname FROM users
WHERE id = %s" % userid)
                premium_query = db_connect.db_query_select("SELECT premium
FROM users WHERE id = %s" % userid)
                if premium_query == "no":
                        premium = "No. <a href='/premium'>Click here</a> to
become a premium member!"
                else:
                        premium = "Yes!"
                msg = ""
                req.write(form % locals())
        else:
                reload(profile)
                reload(db_connect)
                cookie = Cookie.get_cookies(req, Cookie.MarshalCookie,
secret='rob3')
                if cookie.has_key('userid'):
                         uidcookie = cookie['userid']
                        userid = uidcookie.value
                form = profile.FORM
                fs = util.FieldStorage(req)
                name = fs.getfirst("name")
                email = fs.getfirst("email")
                db_connect.db_query_update("UPDATE users SET fname='%s',
email='%s' WHERE id = '%s'" % (name, email, id))
                # db_connect.db_query_update("INSERT INTO users (id, fname,
email) VALUES (%s, '%s', '%s')" % (userid, name, email))
                form = profile.FORM
                username = db_connect.db_query_select("SELECT username FROM
users WHERE id = %s" % userid)
                email = db_connect.db_query_select("SELECT email FROM users
WHERE id = %s" % userid)
                password = db_connect.db_query_select("SELECT password FROM
users WHERE id = %s" % userid)
                fname = db_connect.db_query_select("SELECT fname FROM users
WHERE id = %s" % userid)
                premium_query = db_connect.db_query_select("SELECT premium
FROM users WHERE id = %s" % userid)
                if premium_query == "no":
                        premium = "No. <a href='/premium'>Click here</a> to
become a premium member!"
                else:
                        premium = "Yes!"
                msg = "<b><center>Your information has been changed!</center></b>"
                req.write(form % locals())

What do you guys think?
 
Thanks a lot in advance, this problem is really buggin' me!


 
Robert Geller

robert at worksofmagic.com

 




More information about the Mod_python mailing list