现在有一个问题.
我的存储过程中有update,最后返回select的表
直接在mysql 中运行可以正常,update也生效
但放在django中,能返回select 表,update在执行存储过程时是运行了的(影响了select结果),但存储过程运行后,查询数据,发现update没有生效,即回滚了...cursor = connection.cursor()
cursor.execute("call Proc_Set_Isread(%s,%s)",[id,'1'])
for row in cursor.fetchall(): 
    ...
  
我想是因为connection.connection.commit()的原因
因为要想返回数据就不能用connection.commit(是不是这样????)
但不用commit,更改就不能生效..... 我在存储过程中调用其它存储过程,也不能解决这个问题...
请问在django/python中,有没有即提交了数据,又查询到结果的好方法.

解决方案 »

  1.   

    在mySQL直接命令下,你的update, select在一个session中,所以可以看到update后的东西,即使没有提交。
    但在你的宿主程序中则不行了。看一下你的宿主程序的说明,如果保持同一SESSION不结束。
      

  2.   

        cursor = connection.cursor()
        cursor.callproc("Proc_Get",(id,1))
        
        result_list = []
        for row in cursor.fetchall():
            print row[0]
        
        cursor.nextset()
        connection.connection.commit()
        
        cursor.close()
        connection.close()解决了.这样就OK了
      

  3.   

    人气太差
    或者在存储过程中这样也可以:
    START TRANSACTION;
    ....
    COMMIT;