【问题标题】:Why can't I do this INSERT in MYSQL? (Python MySQLdb)为什么我不能在 MYSQL 中执行此 INSERT? (Python MySQL数据库)
【发布时间】:2010-02-15 23:53:35
【问题描述】:

这是我之前提出的这个问题的后续: Why can't I insert into MySQL?

这个问题部分解决了它。现在我正在用 Python 做它,但它不起作用:(

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

我什至做了 float(utm_easting) 和 float(utm_northing)

编辑:这是错误:

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

【问题讨论】:

  • 您收到什么错误消息?最终查询是什么样的?
  • 我不知道....如何从光标打印出来? cursor.last_query 什么的?
  • 我不知道(我对 Python 一无所知),但通常它类似于 last_query 或 execute_query。不过,错误消息可能更具启发性。

标签: python mysql database insert


【解决方案1】:

来自here (pdf)

跟随语句串 execute() 的参数,提供一个元组 包含要绑定的值 占位符,按它们的顺序 应该出现在字符串中。如果 你只有一个值 x, 将其指定为 (x,) 以表示 单元素元组。

tl;博士:

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])

【讨论】:

    【解决方案2】:

    这可能取决于您用于 SQL 调用的任何 API,但也可能是:

    a) 值实际上不是字符串,您需要将 %s 替换为适当的类型(例如,%d 表示整数?),或者

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

    【讨论】:

    • @Gnudiff:%s 是 MySQLdb 用于传递给查询的任何值的参数标记。您不需要引用任何值;甚至字符串。详情见这里:wiki.python.org/moin/DbApiFaq
    【解决方案3】:

    解决了。在我的变量周围加上括号。

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

    【讨论】:

      猜你喜欢
      • 2012-12-19
      • 1970-01-01
      • 2017-04-16
      • 2010-10-02
      • 2012-02-10
      • 2021-02-15
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多