首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >TypeError:在元组python中的字符串格式化错误期间,并非所有参数都已转换

TypeError:在元组python中的字符串格式化错误期间,并非所有参数都已转换
EN

Stack Overflow用户
提问于 2018-05-31 08:28:32
回答 2查看 209关注 0票数 1

我正在尝试在数据库中保存一堆元组

代码语言:javascript
复制
 cursor = cnx.cursor()
         query = """INSERT INTO `TableA`
                     (`clientid`,
                    `createddatetime`,
                    `siteid`,...)
                 VALUES(?,?,?,...)"""

    cursor.executemany(query, listTosave)

My listTosave包含元组列表,如;

('AS0001','1170',1,'1',‘未知’,442,1,datetime.datetime(2018,5,28,23,0),datetime.datetime(2018,3,15,11,15),datetime.datetime(2018,3,15,10,56),datetime.datetime(2018,5,28,23,18,26),datetime.datetime(2018,5,28,23,59,22),Decimal('15177.3184'),Decimal('15185.7562'),Decimal('8.4378'),Decimal('1313.0547'),Decimal('1313.6179'),Decimal('0.5632'),Decimal('0.0000'),Decimal('0.0000'),Decimal('24.6518'),Decimal('24.6518'),15101.7062,0.0,0.0,0.0,24.6563)、(.)

当我尝试保存时,我得到了;

代码语言:javascript
复制
 File "/tmp/pymodules/pymysql/cursors.py", line 194, in executemany
  File "/tmp/pymodules/pymysql/cursors.py", line 194, in <genexpr>
  File "/tmp/pymodules/pymysql/cursors.py", line 163, in execute
  File "/tmp/pymodules/pymysql/cursors.py", line 142, in mogrify
TypeError: not all arguments converted during string formatting

为什么会出现这个错误?

编辑:我还将datetime对象/decimal对象转换为字符串。我的新清单是这样的:

('AS0001','1170','1','1',‘未知’,'442','1','2018-05-28 23:00:00','2018-03-15 11:15:00','2018-03-15 10:56:00','2018-05-28 23:18:26','2018-05-28 23:59:22','15177.3184','15185.7562','8.4378','1313.0547','1313.6179','0.5632','0.0000','0.0000','0.0000','0.0000','0.0000','0.0000','24.6518','24.6518','15101.7062','0.0','0.0',‘0.0’),(.....)

但是我还是得到了同样的错误

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-31 11:46:23

这是我工作过的一个最小的例子。

代码语言:javascript
复制
query = "INSERT INTO `pet`(`name`,`owner`) values(%s,%s)"
listTosave = [('some','shsjhs'),('sosos','shshsh')]
cursor.executemany(query, listTosave)

确保您有一个元组列表,并且在查询字符串中使用%s

票数 1
EN

Stack Overflow用户

发布于 2018-05-31 08:43:23

从返回的错误中可以看出,这可能与列表中存储的datetime对象有关,没有正确转换为字符串表示。将这些包装在str()中可能是导致问题的原因。

请注意以下示例:

代码语言:javascript
复制
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2018, 5, 31, 8, 42, 48, 172575)
>>> str(datetime.datetime.now())
'2018-05-31 08:42:53.192586'

另一种选择也许能够通过使用json.dumps将列表元素转换为json字符串格式来消除错误。但这取决于您希望如何将数据存储在数据库中。请参阅以下内容:

代码语言:javascript
复制
>>> import json
>>> element = (
... 'AS0001', '1170', '1', '1', 'Unknown', '442', '1', '2018-05-28 23:00:00', '2018-03-15 11:15:00', '2018-03-15 10:56:00',
... '2018-05-28 23:18:26', '2018-05-28 23:59:22', '15177.3184', '15185.7562', '8.4378', '1313.0547', '1313.6179', '0.5632',
... '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '24.6518', '24.6518', '15101.7062', '0.0', '0.0', '0.0',
... '24.6563')
>>> json.dumps(element)
'["AS0001", "1170", "1", "1", "Unknown", "442", "1", "2018-05-28 23:00:00", "2018-03-15 11:15:00", "2018-03-15 10:56:00", "2018-05-28 23:18:26", "2018-05-28 23:59:22", "15177.3184", "15185.7562", "8.4378", "1313.0547", "1313.6179", "0.5632", "0.0000", "0.0000", "0.0000", "0.0000", "0.0000", "0.0000", "24.6518", "24.6518", "15101.7062", "0.0", "0.0", "0.0", "24.6563"]'

在检索此数据时,您可以使用json.loads将其加载回python对象格式

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50615060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档