我正在使用 Python 2.7 的 mysql.connector 模块。我已将代码分解为最简单的脚本,但我仍然遇到此问题。问题是,当我尝试获取最后一行 id(在 MySQL 中将是 LAST_INSERT_ID
)时,无论插入了多少行,我都会得到 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
我的存储过程如下所示:
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
这是我的
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;
我已经验证存储过程正常工作并且
.callproc()
调用按预期工作。唯一不起作用的是 .lastrowid
调用。有什么建议么? 最佳答案
lastrowid
属性:
而且您还没有运行INSERT
或UPDATE
语句,而是运行了CALL
语句。
要获取详细信息,您必须遵循mysql_insert_id
调用的 lastrowid
函数的C API文档的链接。特别是:
我在这里假设您的TOOLS
表实际上确实有一个AUTO_INCREMENT
列;否则,您毫无值(value)可言。
另外,请注意,这只是与您的断言相反的方式之一,lastrowid
和LAST_INSERT_ID()
是不同的东西。值得阅读 LAST_INSERT_ID
的文档。