Python MySQL存储过程有时返回0行

Python MySQL存储过程有时返回0行,python,mysql,odbc,pyodbc,pymysql,Python,Mysql,Odbc,Pyodbc,Pymysql,编辑:我现在尝试了pyodbc和pymysql,得到了相同的结果(调用存储过程时返回零行)。之前忘了提到这是在Ubuntu 16.04.2 LTS上使用MySQL ODBC 5.3驱动程序(libmyodbc5w.so)实现的 我在Python3.5.2上使用pymysql(0.7.11),对MySQL 5.6.10数据库执行各种存储过程。我遇到了一个奇怪且不一致的问题,虽然我可以立即重新运行完全相同的代码并获得预期的行数,但偶尔会返回零个结果 代码非常简单 from collections

编辑:我现在尝试了pyodbc和pymysql,得到了相同的结果(调用存储过程时返回零行)。之前忘了提到这是在Ubuntu 16.04.2 LTS上使用MySQL ODBC 5.3驱动程序(libmyodbc5w.so)实现的


我在Python3.5.2上使用pymysql(0.7.11),对MySQL 5.6.10数据库执行各种存储过程。我遇到了一个奇怪且不一致的问题,虽然我可以立即重新运行完全相同的代码并获得预期的行数,但偶尔会返回零个结果

代码非常简单

from collections import OrderedDict
import pymysql
from pymysql.cursors import DictCursorMixin, Cursor

class OrderedDictCursor(DictCursorMixin, Cursor):
    dict_type = OrderedDict

try:
    connection = pymysql.connect(   
        host=my_server,
        user=my_user,
        password=my_password,
        db=my_database,
        connect_timeout=60,
        cursorclass=pymysql.cursors.DictCursor
        )

    param1 = '2017-08-23 00:00:00'
    param2 = '2017-08-24 00:00:00'

    proc_args = tuple([param1, param2])

    proc = 'my_proc_name'

    cursor = connection.cursor(OrderedDictCursor)
    cursor.callproc(proc, proc_args)
    result = cursor.fetchall()
except Exception as e:
    print('Error: ', e)
finally:
    if not isinstance(connection, str):
        connection.close()

通常情况下,它工作得很好。但每隔一段时间,它几乎立即完成,但结果集中没有行。我看不到任何错误,什么都没有。。。再次运行它,没有问题。

发现问题与pymysql、odbc等无关,而是与参数传递到存储过程的顺序有关

在我的桌面上,我使用的是Python3.6,一切正常。我没有意识到,tho,3.5.2和3.6之间的一个变化影响了通过json.loads添加到dictionary对象的项目的排序方式

传递的参数来自最初通过json填充的dict对象。加载。。。因为它们在3.6之前是无序的,所以运行代码有时会意味着我的starttime和endtime参数被向后传递到MySQL存储过程。因此,返回零行

一旦我意识到这是一个问题,修复它只需将object\u pairs\u hook=OrderedDict添加到json.loads部分