为什么我无法在MYSQL中执行此INSERT?(Python MySQLdb)
这是我之前问的一个问题的后续:为什么我不能插入到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])