Thread: [SQLObject] sqlobject + mod_python: "mysql server gone" error
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: Thomas G. <th...@us...> - 2005-04-18 08:35:16
|
Hello, I'm using SQLObject 0.6-1 with mod_python 3.1.3-3 and MySQL 4.1.10a-2 (python 2.3, python-mysqldb 1.1.6-1.1). After starting the apache2 server everything works fine, but when accessing my site some hours later I get an "OperationalError: (2006, 'MySQL server has gone away')" from sqlobject/MySQLdb. The mysql server is still running when the problem occurs, I can access it from the command line. Thus it seems that the MySQLdb connection to MySQL is lost. After restarting apache2 everything works again. I create the sqlobject with: conn = sqlobject.connectionForURI("mysql://user:password@localhost/spieleabend") class User(sqlobject.SQLObject): _connection = conn _cacheValue = False _fromDatabase = 1 I'm getting the error when I'm using the User class from my mod_python handler like: user=User.selectBy(login=fields["loginname"].lower()) if not user.count(): ... The user.count() fails then with the operational error. What can I do so that SQLObject/MySQLdb don't lose the connection to the MySQL server after some hours? Or how can I refresh the connection when it fails? Did I miss anything in the documentation? Thanks for any help, Thomas Traceback ( from cgitb.py ): /home/thomas/spieleabend-h/spieleabend.py in index(self=<spieleabend.LoginHandler instance>, fields=<PyWaf.Handler.ReqParam instance>) 84 return {'page':"/orga/login", 'error':"Bitte Login und Passwort angeben."} 85 user=User.selectBy(login=fields["login"].lower()) *86* if not user.count(): 87 user=User.selectBy(email=fields["login"].lower()) 88 if user.count()==0 or user[0].password != sha.new(str(fields["password"])).hexdigest(): user = <sqlobject.main.SelectResults object>, user.count = <bound method SelectResults.count of <sqlobject.main.SelectResults object>> /usr/lib/python2.3/site-packages/sqlobject/main.py in count(self=<sqlobject.main.SelectResults object>) 1253 def count(self): 1254 """ Counting elements of current select results """ *1255* count = self.accumulate('COUNT(*)') 1256 if self.ops.get('start'): 1257 count -= self.ops['start'] count undefined, self = <sqlobject.main.SelectResults object>, self.accumulate = <bound method SelectResults.accumulate of <sqlobject.main.SelectResults object>> /usr/lib/python2.3/site-packages/sqlobject/main.py in accumulate(self=<sqlobject.main.SelectResults object>, expression='COUNT(*)') 1249 """ 1250 conn = self.ops.get('connection', self.sourceClass._connection) *1251* return conn.accumulateSelect(self,expression) 1252 1253 def count(self): conn = <sqlobject.mysql.mysqlconnection.MySQLConnection instance>, conn.accumulateSelect = <bound method MySQLConnection.accumulateSelect o....mysql.mysqlconnection.MySQLConnection instance>>, self = <sqlobject.main.SelectResults object>, expression = 'COUNT(*)' /usr/lib/python2.3/site-packages/sqlobject/dbconnection.py in accumulateSelect(self=<sqlobject.mysql.mysqlconnection.MySQLConnection instance>, select=<sqlobject.main.SelectResults object>, expression='COUNT(*)') 246 q += " FROM %s WHERE" % ", ".join(select.tables) 247 q = self._addWhereClause(select, q, limit=0, order=0) *248* val = int(self.queryOne(q)[0]) 249 return val 250 val undefined, builtin int = <type 'int'>, self = <sqlobject.mysql.mysqlconnection.MySQLConnection instance>, self.queryOne = <bound method MySQLConnection.queryOne of <sqlob....mysql.mysqlconnection.MySQLConnection instance>>, q = "SELECT COUNT(*) FROM user WHERE login = 'thomas'" /usr/lib/python2.3/site-packages/sqlobject/dbconnection.py in queryOne(self=<sqlobject.mysql.mysqlconnection.MySQLConnection instance>, s="SELECT COUNT(*) FROM user WHERE login = 'thomas'") 220 221 def queryOne(self, s): *222* return self._runWithConnection(self._queryOne, s) 223 224 def _insertSQL(self, table, names, values): self = <sqlobject.mysql.mysqlconnection.MySQLConnection instance>, self._runWithConnection = <bound method MySQLConnection._runWithConnection....mysql.mysqlconnection.MySQLConnection instance>>, self._queryOne = <bound method MySQLConnection._queryOne of <sqlo....mysql.mysqlconnection.MySQLConnection instance>>, s = "SELECT COUNT(*) FROM user WHERE login = 'thomas'" /usr/lib/python2.3/site-packages/sqlobject/dbconnection.py in _runWithConnection(self=<sqlobject.mysql.mysqlconnection.MySQLConnection instance>, meth=<bound method MySQLConnection._queryOne of <sqlo....mysql.mysqlconnection.MySQLConnection instance>>, *args=("SELECT COUNT(*) FROM user WHERE login = 'thomas'",)) 115 conn = self.getConnection() 116 try: *117* val = meth(conn, *args) 118 finally: 119 self.releaseConnection(conn) val undefined, meth = <bound method MySQLConnection._queryOne of <sqlo....mysql.mysqlconnection.MySQLConnection instance>>, conn = <_mysql.connection open to 'localhost' at 8297dd4>, args = ("SELECT COUNT(*) FROM user WHERE login = 'thomas'",) /usr/lib/python2.3/site-packages/sqlobject/dbconnection.py in _queryOne(self=<sqlobject.mysql.mysqlconnection.MySQLConnection instance>, conn=<_mysql.connection open to 'localhost' at 8297dd4>, s="SELECT COUNT(*) FROM user WHERE login = 'thomas'") 213 self.printDebug(conn, s, 'QueryOne') 214 c = conn.cursor() *215* self._executeRetry(conn, c, s) 216 value = c.fetchone() 217 if self.debugOutput: self = <sqlobject.mysql.mysqlconnection.MySQLConnection instance>, self._executeRetry = <bound method MySQLConnection._executeRetry of <....mysql.mysqlconnection.MySQLConnection instance>>, conn = <_mysql.connection open to 'localhost' at 8297dd4>, c = <MySQLdb.cursors.Cursor object>, s = "SELECT COUNT(*) FROM user WHERE login = 'thomas'" /usr/lib/python2.3/site-packages/sqlobject/mysql/mysqlconnection.py in _executeRetry(self=<sqlobject.mysql.mysqlconnection.MySQLConnection instance>, conn=<_mysql.connection open to 'localhost' at 8297dd4>, cursor=<MySQLdb.cursors.Cursor object>, query="SELECT COUNT(*) FROM user WHERE login = 'thomas'") 32 while 1: 33 try: *34* return cursor.execute(query) 35 except MySQLdb.OperationalError, e: 36 if e.args[0] == 2013: cursor = <MySQLdb.cursors.Cursor object>, cursor.execute = <bound method Cursor.execute of <MySQLdb.cursors.Cursor object>>, query = "SELECT COUNT(*) FROM user WHERE login = 'thomas'" /usr/lib/python2.3/site-packages/MySQLdb/cursors.py in execute(self=<MySQLdb.cursors.Cursor object>, query="SELECT COUNT(*) FROM user WHERE login = 'thomas'", args=None) 93 """ 94 del self.messages[:] *95* return self._execute(query, args) 96 97 def _execute(self, query, args): self = <MySQLdb.cursors.Cursor object>, self._execute = <bound method Cursor._execute of <MySQLdb.cursors.Cursor object>>, query = "SELECT COUNT(*) FROM user WHERE login = 'thomas'", args = None /usr/lib/python2.3/site-packages/MySQLdb/cursors.py in _execute(self=<MySQLdb.cursors.Cursor object>, query="SELECT COUNT(*) FROM user WHERE login = 'thomas'", args=None) 112 exc, value, tb = exc_info() 113 del tb *114* self.errorhandler(self, exc, value) 115 self._executed = query 116 return r self = <MySQLdb.cursors.Cursor object>, self.errorhandler = <bound method Connection.defaulterrorhandler of <_mysql.connection open to 'localhost' at 8297dd4>>, exc = <class _mysql_exceptions.OperationalError>, value = <_mysql_exceptions.OperationalError instance> /usr/lib/python2.3/site-packages/MySQLdb/connections.py in defaulterrorhandler(connection=<_mysql.connection open to 'localhost' at 8297dd4>, cursor=<MySQLdb.cursors.Cursor object>, errorclass=<class _mysql_exceptions.OperationalError>, errorvalue=<_mysql_exceptions.OperationalError instance>) 31 else: 32 connection.messages.append(error) *33* raise errorclass, errorvalue 34 35 errorclass = <class _mysql_exceptions.OperationalError>, errorvalue = <_mysql_exceptions.OperationalError instance> OperationalError: (2006, 'MySQL server has gone away') args = (2006, 'MySQL server has gone away') |
From: Philippe N. <ph...@re...> - 2005-04-19 12:41:46
|
Le 18/4/2005, "Thomas Geffert" <th...@us...> a =E9crit: >Hello, > >I'm using SQLObject 0.6-1 with mod_python 3.1.3-3 and MySQL 4.1.10a-2 >(python 2.3, python-mysqldb 1.1.6-1.1). > >After starting the apache2 server everything works fine, but when >accessing my site some hours later I get an "OperationalError: (2006, >'MySQL server has gone away')" from sqlobject/MySQLdb. > >The mysql server is still running when the problem occurs, I can access >it from the command line. Thus it seems that the MySQLdb connection to >MySQL is lost. > >After restarting apache2 everything works again. > You need to make persistent db connection. This thread on mod_python@ may give you some hints, though it's a bit old one: http://www.modpython.org/pipermail/mod_python/2003-August/014014.html Philippe |