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)
上面这段代码有问题么? 为啥会报错呢 ... 自己顶一下. :em17: Day Day Up. 没用过MySQLdb,不过接口也是DB-API 2.0,和sqlite3类似。看上去是“?”和传入的params不匹配,改改:for d1 in data:
param = d1 + (d1,)
params = params + (param,) 回复 4# timespace
sqlite 的 api 里说明了,要用 ? 做 占位符, mysqldb 的 文档里说的好象是用 %s, 我等下换换试试.
另外, 报错的不是数量, 直接报语法错误.
页:
[1]