ultramysql icon indicating copy to clipboard operation
ultramysql copied to clipboard

query('SELECT...) returns tuple (0L, 0L) instead of rows/fields, sometimes

Open denis-ryzhkov opened this issue 9 years ago • 0 comments

Versions: umysql-2.61, python-2.7.6, gevent-1.0.1.

query('SELECT...) returns tuple (0L, 0L) sometimes, as if it is query('INSERT...) or query('UPDATE...).

In almost all cases exactly the same query returns expected "result.rows" and "result.fields". But then it suddenly returns tuple (0L, 0L) and this behaviour can be cured by reconnecting to DB. I catch this bug several times a day, so I may add any debug code - please advise.

Current workaround:

    result = db_conn.query(sql, values)

    if sql.lstrip().startswith('SELECT') and isinstance(result, tuple):
        log.error('reconnecting to db on tuple SELECT: {}'.format(result)) # Logs: (0L, 0L)
        try:
            db_conn.close()
        except Exception:
            pass
        db_conn = umysql.Connection()
        db_conn.connect(...)
        return db_conn.query(sql, values) # Normal "result.rows" this time.

    return result

denis-ryzhkov avatar Jun 05 '15 09:06 denis-ryzhkov