执行

时间:2018-04-15 04:10:47

标签: python python-3.x sqlite

sqlite3.execute的返回值是否总是自我?即我可以安全地return some_connection_obj.execute(...)或使用方法链接吗?我在该文件中找不到相关文字。

1 个答案:

答案 0 :(得分:1)

当文档失败时,请查看代码(python 3.6.4):

在_pysqlite_query_execute函数结束:

    if (PyErr_Occurred()) {
        self->rowcount = -1L;
        return NULL;
    } else {
        Py_INCREF(self);
        return (PyObject*)self;
    }
}

PyObject* pysqlite_cursor_execute(pysqlite_Cursor* self, PyObject* args)
{
    return _pysqlite_query_execute(self, 0, args);
}

因此,除非发生错误,否则该方法将返回self。

但是,根据PEP 249(对于DB API 2),未定义返回值,这意味着您可以自己使用,并且您以这种方式编写的代码可能无法在不同的DB API 2之间移植实现。事实上,根据psycopg docs .execute返回None

答案是,人们无法在更广泛的意义上安全地链接方法,因为这样做会限制未来的代码重用可能性。