为什么我无法在MYSQL中执行此INSERT?(Python MySQLdb)

1 投票
3 回答
4563 浏览
提问于 2025-04-15 19:19

这是我之前问的一个问题的后续:为什么我不能插入到MySQL中?

那个问题部分解决了我的困惑。现在我在用Python做这件事,但还是不行 :(

cursor.execute("INSERT INTO life(user_id, utm)  values(%s,PointFromWKB(point(%s,%s)))",the_user_id, utm_easting, utm_northing)

我甚至把utm_easting和utm_northing都转换成了浮点数(float)。

编辑:这是出现的错误:

execute() 最多接受3个参数(给了5个)

3 个回答

1

解决了。把我的变量用括号括起来。

cursor.execute("INSERT INTO life(user_id, utm)  values(%s,PointFromWKB(point(%s,%s)))",(the_user_id, utm_easting, utm_northing))
1

这可能跟你用的SQL调用的API有关,但可能有以下两种情况:

a) 其实这些值并不是字符串,你需要把%s替换成合适的类型,比如整数就用%d?或者

b) 字符串值需要用引号包起来,像这样:values('%s',PointFromWKB(point('%s','%s')))

4

来自 这里 (pdf):

在调用 execute() 函数时,除了要传入一个字符串作为语句外,还需要提供一个元组,这个元组里包含了要绑定到占位符的值,并且这些值的顺序要和字符串中的占位符顺序一致。如果你只有一个值 x,记得要用 (x,) 的形式来表示这是一个只有一个元素的元组。

总结:

cursor.execute("""INSERT INTO life(user_id, utm) 
    values(%s,PointFromWKB(point(%s,%s)))""", 
    (the_user_id, utm_easting, utm_northing))

补充说明:你也可以传一个列表作为 execute() 的第二个参数。

cursor.execute("""INSERT INTO life(user_id, utm) 
    values(%s,PointFromWKB(point(%s,%s)))""", 
    [the_user_id, utm_easting, utm_northing])

撰写回答