[英]MySQL stored procedure syntax for Python variable passing
Suppose I have a stored procedure in MYSQL Workbench:假设我在 MYSQL 工作台中有一个存储过程:
CREATE DEFINER=`root`@`localhost` PROCEDURE `calculateLeadTime`()
BEGIN
SET @lastDate = (SELECT sessionDate FROM stock
WHERE product = (%s)
ORDER BY stocksessionID DESC LIMIT 1);
SET @secondLastDate = (SELECT sessionDate FROM stock WHERE product = (%s)
ORDER BY stocksessionID DESC LIMIT 1, 1);
SET @leadTime = (SELECT DATEDIFF(@lastDate, @secondLastDate));
SET @lastStockSessionID = (SELECT stocksessionID
FROM stock WHERE product = (%s) ORDER BY stocksessionID DESC LIMIT 1);
UPDATE stock SET leadTime = (@leadTime)
WHERE stocksessionID = @lastStockSessionID;
END
What syntax do I use in the stored procedure in replacement of (%s) as it produces an error?我在存储过程中使用什么语法来替换 (%s),因为它会产生错误? My goal is to call it via Python and pass variable's into the (%s) places.
我的目标是通过 Python 调用它并将变量传递到 (%s) 位置。
Try this one:试试这个:
CREATE DEFINER=`root`@`localhost` PROCEDURE `calculateLeadTime`(
IN product varchar(64))
BEGIN
SET @lastDate = (SELECT sessionDate FROM stock
WHERE product = (%s)
ORDER BY stocksessionID DESC LIMIT 1);
SET @secondLastDate = (SELECT sessionDate FROM stock WHERE product = (%s)
ORDER BY stocksessionID DESC LIMIT 1, 1);
SET @leadTime = (SELECT DATEDIFF(@lastDate, @secondLastDate));
SET @lastStockSessionID = (SELECT stocksessionID
FROM stock WHERE product = (%s) ORDER BY stocksessionID DESC LIMIT 1);
UPDATE stock SET leadTime = (@leadTime)
WHERE stocksessionID = @lastStockSessionID;
END
and when calling the procedure并在调用程序时
cursor.execute('{CALL [calculateLeadTime](?)}',
('value'))
or或者
cursor.callproc('calculateLeadTime', ['product_name, ])
Pass the value of your product传递您产品的价值
You need to define a variable in the stored procedure and use that instead of %s
.您需要在存储过程中定义一个变量并使用它而不是
%s
。
CREATE DEFINER=`root`@`localhost` PROCEDURE `calculateLeadTime`(
in_product varchar(255)
)
BEGIN
DECLARE v_last_date date;
DECLARE v_second_last_date date;
DECLARE v_lead_time int;
SELECT sessionDate into v_last_date
FROM stock
WHERE product = in_product
ORDER BY stocksessionID DESC
LIMIT 1;
SELECT sessionDate into v_second_last_date
FROM stock
WHERE product = in_product
ORDER BY stocksessionID DESC
LIMIT 1;
SELECT DATEDIFF(v_last_date, v_second_last_date) into v_lead_time;
UPDATE stock SET leadTime = v_lead_time
WHERE stocksessionID = (
SELECT stocksessionID
FROM stock
WHERE product = in_product
ORDER BY stocksessionID DESC
LIMIT 1
);
END
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.