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.
>>>
>>>
>>>

-- 



Reply via email to