Alright, here we go. The attached program exhibits the problem for me on MySQLdb 0.9.2, but not 0.9.1. Admittedly, other variables changed too.
Can a couple more people try it and report their results? A Linux build of 0.9.3 beta would be especially interesting. Once I collect a few more data points, then I'll send this on to Andy Dustman and see what he says... -Chuck -- http://ChuckEsterbrook.com/
""" This program will do this 1,000 times: select * from TABLE limit 1 --making a new connection each time. Generally this succeeds in MySQLdb 0.9.1 and earlier, and fails in 0.9.2--regardless of anything else. To run: Edit the config class below with your db info. Then run. Success: Python 2.1.1 MySQLdb 0.9.1 MySQL 3.23.41 Mandrake ?7.x? Chuck Esterbrook on 2003-07-11 Python 2.1.2 MySQLdb 0.9.1 MySQL 3.23.36 RedHat ?7.x? Chuck Esterbrook on 2003-07-11 Failures: Python 2.3.2 MySQLdb 0.9.2 MySQL 3.23.41 Windows XP Pro SP1 Chuck Esterbrook on 2003-07-11 100 101 Traceback (most recent call last): File "\\192.168.1.50\echuck\mysql-prob.py", line 57, in ? fetch() File "\\192.168.1.50\echuck\mysql-prob.py", line 44, in fetch passwd=config.password) File "C:\Python23\Lib\site-packages\MySQLdb\__init__.py", line 63, in Connect return apply(Connection, args, kwargs) File "C:\Python23\Lib\site-packages\MySQLdb\connections.py", line 115, in __init__ self._make_connection(args, kwargs2) File "C:\Python23\Lib\site-packages\MySQLdb\connections.py", line 41, in _make_connection apply(super(ConnectionBase, self).__init__, args, kwargs) _mysql_exceptions.OperationalError: (1040, 'Too many connections') """ import MySQLdb class config: db = '' user = '' password = '' table = '' repeatPerTable = 1000 def fetch(): for i in range(config.repeatPerTable): print i conn = MySQLdb.connect(db=config.db, user=config.user, passwd=config.password) cur = conn.cursor() cur.execute('select * from %s limit 1' % config.table) results = cur.fetchall() # The following are feeble attempts to fix the problems # experienced with MySQLdb 0.9.2. They didn't help. #import gc, time #gc.collect() #time.sleep(0.1) # give some time for sockets to close? print 'success!' if __name__=='__main__': fetch()