You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中GREATEST(CEILING())函数参数传递类型转换问题求助

解决MySQL Connector传递浮点数参数的类型错误问题

直接拼接浮点数到SQL语句里会触发类型错误,而且这种做法存在SQL注入风险,正确的做法是使用MySQL Connector的参数化查询功能,让驱动自动处理类型转换。

正确写法1:使用位置占位符 %s

import mysql.connector
conn = mysql.connector.connect()
cur = conn.cursor()

Wt1 = 7.02
Wt2 = 5.4
# 用%s作为参数占位符,第二个参数传参数元组
cur.execute(
    'SELECT GREATEST(CEILING(Tot_Weight + %s), %s) FROM TestTable ORDER BY id ASC;',
    (Wt1, Wt2)
)
print(cur.fetchall())

正确写法2:使用命名参数(可读性更好)

import mysql.connector
conn = mysql.connector.connect()
cur = conn.cursor()

Wt1 = 7.02
Wt2 = 5.4
# 用%(参数名)s作为占位符,第二个参数传参数字典
cur.execute(
    'SELECT GREATEST(CEILING(Tot_Weight + %(wt1)s), %(wt2)s) FROM TestTable ORDER BY id ASC;',
    {'wt1': Wt1, 'wt2': Wt2}
)
print(cur.fetchall())

为什么之前的写法不行?

你之前尝试直接拼接浮点数和字符串,即使把Wt1转成str(Wt1),虽然能解决类型错误,但会带来两个问题:

  1. 浮点数转字符串可能出现格式问题(比如7.02变成7.020000000000001),导致SQL计算异常;
  2. 存在SQL注入漏洞,如果参数来自用户输入,恶意输入会直接执行危险SQL语句。

内容的提问来源于stack exchange,提问作者user1335606

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 00:58:13