python - 用于 Python 变量传递的 MySQL 存储过程语法
问题描述
假设我在 MYSQL Workbench 中有一个存储过程:
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
我在存储过程中使用什么语法来替换 (%s),因为它会产生错误?我的目标是通过 Python 调用它并将变量传递到 (%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
推荐阅读
- neo4j - 由于周期性提交错误,无法在 neo4j 中加载 CSV
- mysql - 以下 CSV 文件脚本在 Laravel 6 中无法正常工作
- javascript - 如何在 AMP 页面中 3 秒后显示元素?
- python-3.x - Django:检索分配给用户模型的所有测试模型实例的所有详细信息
- python - 如何从 Pandas Dataframe 中分离日文和英文文本?
- reactjs - npm install -g react-native-cli 与使用 npx react-native init 有什么区别
? - django - Django - 创建多个 xml 并将其添加到 zip,并作为附件下载
- electron - 有没有办法在电子 js 中使用 AzureAD 登录?
- python - Python:如果给定其中任意两个参数,我编写代码来查找 x、y 或 (x+y)2 的值。运行良好,直到 x 或 y 是浮动的
- java - JAVA 的 StandardStringDigester 的 PHP 实现