Done: http://code.google.com/p/web2py/issues/detail?id=1037
On Thursday, September 27, 2012 4:33:37 PM UTC-4, Massimo Di Pierro wrote: > > Is this issue still open? If so, can you open a ticket about it? > > Massimo > > On Monday, 24 September 2012 14:38:14 UTC-5, Yarin wrote: >> >> >> >> db.py: >> db.define_table('mytable',Field('myfield','string')) >> >> sproc: >> DELIMITER // >> CREATE PROCEDURE TestSproc() >> BEGIN >> SELECT COUNT(*) FROM mytable; >> END // >> DELIMITER; >> >> tests.py >> """NOTE: Tests 1-3 will fail every time in wsgi/linux environments. >> From the web2py command line, they will work once, until another >> operation is called on the db, INCLUDING commit(). >> >> In web2py 1, you can run these once successfully, but subsequent sql >> operations on the current connection return None results. >> """ >> >> def test_1(): >> ''' RESULT: ProgrammingError: (2014, "Commands out of sync; you cant >> run this command now") ''' >> >> sql = '''CALL TestSproc();''' >> results = db.executesql(sql, as_dict=True) >> return str(results) >> >> def test_2(): >> ''' RESULT: ProgrammingError: (2014, "Commands out of sync; you cant >> run this command now") ''' >> >> sql = """CALL TestSproc();""" >> results = db.executesql(sql, as_dict=True) >> db.commit() >> return str(results) >> >> def test_3(): >> ''' RESULT: ProgrammingError: (2014, "Commands out of sync; you cant >> run this command now") ''' >> >> sql = """CALL TestSproc();""" >> db._adapter.execute(sql) >> results = db._adapter.cursor.fetchall() >> return str(results) >> >> def test_4(): >> ''' RESULT: Works ''' >> >> import contrib.pymysql as pymysql >> sql = """CALL TestSproc();""" >> conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd= >> 'root', db='test') >> cur = conn.cursor(pymysql.cursors.DictCursor) >> cur.execute(sql) >> results = cur.fetchall() >> cur.close() >> conn.close() >> return str(results) >> >> >> >> >> >> On Monday, September 24, 2012 1:10:14 PM UTC-4, Massimo Di Pierro wrote: >>> >>> can you show us some of your code. This may be a concurrency issues. I >>> cannot thing anything we change that would affect the behavior. >>> >>> On Sunday, 23 September 2012 22:43:28 UTC-5, Yarin wrote: >>>> >>>> After upgrading to web2py 2.0, we can no longer use the DAL or mysql >>>> adapters to make MySQL stored procedure calls. >>>> >>>> In web2py 1.x I had >>>> reported<https://groups.google.com/d/msg/web2py/VaGJjwE3eYQ/GPa3xRe-HVsJ>how >>>> mysql stored procedures weren't working for us in certain >>>> circumstances- however we were able to circumvent those issues by simply >>>> creating a new DAL instance everytime we had to call a sproc. With the new >>>> DAL, that's no longer an option- indeed, any call to a stored procedure >>>> seems to fail in any attempt through the DAL or mysql adapter. >>>> >>>> - Fails with both pymysql and mysqldb drivers >>>> - Fails when calling commit() immediately after >>>> - We did side-by-side comparisons with web2py 1.x on same server, >>>> pointing to same db, and confirmed this fails only in 2.0 >>>> - You can make sproc calls using the DAL straight from the web2py >>>> shell, but only if you don't call commit. >>>> >>>> >>>> Stack trace: >>>> >>>> Traceback (most recent call last): >>>> File "/opt/web-apps/web2py/gluon/main.py", line 580, in wsgibase >>>> BaseAdapter.close_all_instances('rollback') >>>> File "/opt/web-apps/web2py/gluon/dal.py", line 511, in >>>> close_all_instances >>>> getattr(instance, action)() >>>> File "/opt/web-apps/web2py/gluon/dal.py", line 1633, in rollback >>>> return self.connection.rollback() >>>> ProgrammingError: (2014, "Commands out of sync; you can't run this command >>>> now") >>>> >>>> >>>> >>>> Right now the only option we've arrive at is to make sproc calls >>>> directly through the pymysql driver API, one per connection. >>>> >>>> >>>> --