Python mysql.connector cursor.lastrowid总是返回0

Bla*_*g23 6 python mysql stored-procedures

我正在使用Python 2.7的mysql.connector模块.我已将代码分解为最简单的脚本,但我仍然遇到此问题.问题是,当我尝试获取最后一行id(将LAST_INSERT_ID在MySQL中)时,无论插入了多少行,我都返回0.有没有人有这个问题的解决方案?

我的代码如下:

import mysql.connector
default_config = {
    'user': 'root',
    'password': 'password',
    'host': '127.0.0.1',
    'database': 'test',
    'raise_on_warnings': True,
    'autocommit': True
    }
connection = mysql.connector.connect(**default_config)
cursor = connection.cursor()
args = ('name', 'desc')
cursor.callproc('sp_tools_insert', args)
lastid = cursor.lastrowid
print lastid # This returns 0 every time, regardless of number of inserts
Run Code Online (Sandbox Code Playgroud)

我的存储过程如下所示:

CREATE PROCEDURE `sp_tools_insert`
    (
        IN p_name VARCHAR(45), 
        IN p_description VARCHAR(255)
    )
BEGIN 
INSERT INTO TOOLS
    (
        tool_name, 
        description                   
    )
VALUES 
    ( 
        p_name, 
        p_description
    ); 
END
Run Code Online (Sandbox Code Playgroud)

这就是我的TOOLS表的定义方式:

DROP TABLE IF EXISTS `test`.`TOOLS` ;

CREATE TABLE IF NOT EXISTS `test`.`TOOLS` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `tool_name` VARCHAR(45) NOT NULL,
  `description` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud)

我已验证存储过程是否正常工作,并且.callproc()调用按预期工作.唯一不起作用的是.lastrowid电话.有什么建议?

aba*_*ert 7

lastrowid属性:

...返回先前INSERT或UPDATE语句为AUTO_INCREMENT列生成的值...

你没有运行INSERTUPDATE声明,你已经CALL发表了一个声明.

要获取详细信息,您必须按照指向mysql_insert_idlastrowid调用的函数的C API文档的链接.特别是:

mysql_insert_id()CALL在生成AUTO_INCREMENT值的存储过程的语句之后返回0 ,因为在这种情况下mysql_insert_id()适用于CALL而不是过程中的语句.在该过程中,您可以LAST_INSERT_ID()在SQL级别使用以获取该AUTO_INCREMENT值.

我在这里假设你的TOOLS桌子确实有一个AUTO_INCREMENT列; 否则,你首先没有价值.

另外,请注意,这只是与您的断言相反的方式之一,lastrowid并且LAST_INSERT_ID()不是同一个方面.值得一读的文档也是值得的LAST_INSERT_ID.