q1208c 发表于 2014-03-27 16:50

on duplicate key update 有问题么? mysqlDB.

Traceback (most recent call last):
File "/root/bin/traffic.py", line 176, in <module>
    traffic_week(timestamp)
File "/root/bin/traffic.py", line 156, in traffic_week
    cur.executemany(sql, params)
File "/usr/lib64/python2.6/site-packages/MySQL_python-1.2.4-py2.6-linux-x86_64.egg/MySQLdb/cursors.py", line 245, in executemany
    self.errorhandler(self, TypeError, msg)
File "/usr/lib64/python2.6/site-packages/MySQL_python-1.2.4-py2.6-linux-x86_64.egg/MySQLdb/connections.py", line 36, in defaulterrorhandler
    raise errorclass, errorvalue
TypeError: not all arguments converted during string formatting
    ## ----------------------------------------------------------------
    sql = """INSERT INTO traffic_hz_week(tr_time, tr_week, tr_hour,
               tr_min, tr_road, tr_road_level,
               tr_speed_total, tr_speed_count)
             VALUES(%s, %s, %s, %s, %s, %s, %s, %s)
             ON DUPLICATE KEY UPDATE
               tr_speed_total = tr_speed_total + %s,
               tr_speed_count = tr_speed_count + 1
          """
    params = ()

    for d1 in data:
      param = d1 + (d1,)
      params = params + ((param),)

    for pa in params:
      print pa

    cur.executemany(sql, params)
上面这段代码有问题么? 为啥会报错呢 ...

q1208c 发表于 2014-03-28 10:03

自己顶一下. :em17:

q1208c 发表于 2014-04-01 07:52

Day Day Up.

timespace 发表于 2014-04-01 10:51

没用过MySQLdb,不过接口也是DB-API 2.0,和sqlite3类似。看上去是“?”和传入的params不匹配,改改:for d1 in data:
      param = d1 + (d1,)
      params = params + (param,)

q1208c 发表于 2014-04-01 10:54

回复 4# timespace


sqlite 的 api 里说明了,要用 ? 做 占位符, mysqldb 的 文档里说的好象是用 %s, 我等下换换试试.

另外, 报错的不是数量, 直接报语法错误.   
页: [1]
查看完整版本: on duplicate key update 有问题么? mysqlDB.