"TypeError: not all arguments converted during string formatting" pymysql 游标执行时



这是我第一次使用pymysql游标执行。我有两次执行;

第一个是:

sql = 'create table if not exists currency(t integer primary key, prediction real default null, realVal real default null)'
cursor.execute(sql)

这非常有效。

第二个是:

data = [(1, 12.5), (2, 10.2)]
sql = 'insert into currency(t, prediction) values(%s, %s) on duplicate key update values prediction=values(prediction)'
cursor.execute(sql, data)

问题就出现在这里。"TypeError:并非所有参数都在字符串格式化期间转换">

我不知道为什么会发生这种事。谁来帮帮我。谢谢

每个人。

这是米科拉。我需要花几天时间来解决这个问题,并最终找到答案。

只有当我使用ON DUPLICATE KEY UPDATE时,才会出现此错误。

实际上没有语法或逻辑错误。

这只是MySQLdb中的一个错误,它位于/usr/lib/pymodules/python2.7/MySQLdb/cursors.py:

restr = (r"svaluess*"
r"((((?<!\)'[^)]*?)[^)]*(?<!\)?'"
r"|[^()]|"
r"(?:([^)]*))"
r")+))")
insert_values= re.compile(restr)

为了克服这个问题,我在下面使用了两个SQL子句。

sql = 'insert into currency(t, prediction) select %s, %s where not exists(select * from currency where t=%s)'
cursor.execute(sql, (1, 10, 1))
sql = 'update currency set prediction=%s where t=%s'
cursor.execute(sql, (12.5, 1))

如果有人能让它变得更好,请分享。

谢谢。

您的第二条语句出现语法错误。第二个词";值";在你的查询中太多了。

insert into currency(t, prediction) values(%s, %s) 
on duplicate key update prediction=values(prediction)

此外,使用cursor.executemany()来插入多个条目,而不是使用execute()

因此,第二个查询的完整代码应该是:

data = [(1, 12.5), (2, 10.2)]
sql = 'insert into currency(t, prediction) values(%s, %s) on duplicate key update prediction=values(prediction)'
cursor.executemany(sql, data)

相关内容

  • 没有找到相关文章

最新更新