Why is this SQL INSERT INTO statement throwing an error: TypeError: not all arguments converted during string formatting
Why is this SQL INSERT INTO statement throwing an error: TypeError: not all arguments converted during string formatting
所以我的代码看起来像:
sqlpoptable = "INSERT INTO datas(createdon) VALUES (%s);"
data = ('a')
cursor.execute(sqlpoptable, data)
postgresConnection.commit()
效果很好。但是,如果我尝试向变量添加任何长度,例如:
sqlpoptable = "INSERT INTO datas(createdon) VALUES (%s);"
data = ('aa')
cursor.execute(sqlpoptable, data)
postgresConnection.commit()
我收到错误:
TypeError: not all arguments converted during string formatting
使用超过一个字符会引发错误是怎么回事?最终我想要做的是在该专栏的条目上添加时间戳。
数据类型是字符变化 256.
你的第一个语句被执行是因为你输入了 'a' 的正确字符,但在第二种情况下你没有输入 'aa' 的正确字符,这就是你出错的原因。
字符只能容纳一个不超过一的长度。
cursor.execute()
的第二个参数必须是 序列 ,例如列表或元组。
您似乎试图在此处创建一个元组:
data = ('aa')
但是,那不是一个元组;它只是一个普通的字符串。单元素元组的语法有点搞笑:
data = ('aa',)
你的第一个例子成功了,因为字符串 也 被认为是(单个字符的)序列,并且你使用了一个单字符的字符串,它匹配 %s
标记在 sql 语句中。
你的第二个例子没有工作,因为你使用了一个双字符的字符串,所以每个字符都被解释为它自己单独的项目,这对于单个 %s
标记来说值太多了。
所以我的代码看起来像:
sqlpoptable = "INSERT INTO datas(createdon) VALUES (%s);"
data = ('a')
cursor.execute(sqlpoptable, data)
postgresConnection.commit()
效果很好。但是,如果我尝试向变量添加任何长度,例如:
sqlpoptable = "INSERT INTO datas(createdon) VALUES (%s);"
data = ('aa')
cursor.execute(sqlpoptable, data)
postgresConnection.commit()
我收到错误:
TypeError: not all arguments converted during string formatting
使用超过一个字符会引发错误是怎么回事?最终我想要做的是在该专栏的条目上添加时间戳。 数据类型是字符变化 256.
你的第一个语句被执行是因为你输入了 'a' 的正确字符,但在第二种情况下你没有输入 'aa' 的正确字符,这就是你出错的原因。
字符只能容纳一个不超过一的长度。
cursor.execute()
的第二个参数必须是 序列 ,例如列表或元组。
您似乎试图在此处创建一个元组:
data = ('aa')
但是,那不是一个元组;它只是一个普通的字符串。单元素元组的语法有点搞笑:
data = ('aa',)
你的第一个例子成功了,因为字符串 也 被认为是(单个字符的)序列,并且你使用了一个单字符的字符串,它匹配 %s
标记在 sql 语句中。
你的第二个例子没有工作,因为你使用了一个双字符的字符串,所以每个字符都被解释为它自己单独的项目,这对于单个 %s
标记来说值太多了。