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电话.有什么建议?
该lastrowid属性:
...返回先前INSERT或UPDATE语句为AUTO_INCREMENT列生成的值...
你没有运行INSERT或UPDATE声明,你已经CALL发表了一个声明.
要获取详细信息,您必须按照指向mysql_insert_id要lastrowid调用的函数的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.