这是我第一次使用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)