我是MySQL Python连接器的新手,我试图找出在预备语句中我是否可以替换非参数?这是我需要在递减计数器时重复执行的查询示例:
UPDATE
material_forecast_series sfs
JOIN material_forecast sf ON sfs.F_ID = sf.F_ID
JOIN material_demand sd ON sd.date_ID = sf.date_ID
AND sd.D_ID = sfs.D_ID
JOIN material_demand_series ds ON sfs.D_ID = ds.D_ID
JOIN OMG_membership om ON ds.item_ID = om.item_ID
JOIN material_FE sfe ON sfe.F_ID = sf.F_ID
SET sfe.v2 = IF(sf.v2 = 0, NULL, (sd.quantity - sf.v2) / sf.v2)
WHERE
sfs.forecast_ID = 15
AND ds.demand_ID = 9
AND ds.O_ID = 2
AND om.OG_ID = 318
AND sd.date_ID = 275
AND sfe.date_ID = 274
在上面的代码段中,最后一个参数sfe.date_ID
将在循环中递减。没问题,我会做sfe.date_ID=%s
。但是在这一行中:SET sfe.v2 = IF(sf.v2 = 0, NULL, (sd.quantity - sf.v2) / sf.v2)
文字v2
需要在每次循环迭代时更改为v3, v4, v5...
。没问题,如果我要使用Python参数替换和常规游标,但我想使用预处理语句的性能原因。
任何其他提高性能的技巧都非常受欢迎
答案 0 :(得分:0)
如何创建一个DynamicSQL,在你的循环中做这样的事情,变量up_counter最终会增加
git mv someName.txt NameOfFolder/someName.txt
答案 1 :(得分:0)
抱歉,这是不可能的。引用the documentation of PREPARE
(强调“数据值”是我的):
语句名称不区分大小写。
preparable_stmt
是字符串文字或包含SQL语句文本的用户变量。文本必须表示单个语句,而不是多个语句。在语句中,?
个字符可用作参数标记,以指示稍后在执行时将数据值绑定到查询的位置。?
字符不应括在引号内,即使您打算将它们绑定到字符串值也是如此。参数标记只能在数据值出现的地方使用,而不能用于SQL关键字,标识符等。
由于v2
和v3
等字段名称在语法上不是数据值而是标识符,因此您无法使用预准备语句将其替换为占位符。