Ошибка типа: не все аргументы преобразованы во время форматирования строки Ошибка в кортеже Python - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь сохранить кучу кортежей в БД

 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), десятичное число ('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), (...........)]

Когда я пытаюсь сохранить, я получаю;

 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

Почему я получаюэта ошибка?

Редактировать: Я также преобразовал объекты даты / времени в десятичные объекты в строку.Мой новый список выглядит так:

[('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»), (.....)]

Но все равно я получаю ту же ошибку

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Вот минимальный пример, с которым я начал работать.

query = "INSERT INTO `pet`(`name`,`owner`) values(%s,%s)"
listTosave = [('some','shsjhs'),('sosos','shshsh')]
cursor.executemany(query, listTosave)

Убедитесь, что у вас есть список кортежей и что вы используете %s в строке запроса

0 голосов
/ 31 мая 2018

По догадкам, которые вы возвращаете, это может быть связано с объектами datetime, которые хранятся в вашем списке, с неправильным преобразованием в строковое представление.Включение их в str() может быть причиной вашей проблемы.

Обратите внимание на следующий пример:

>>> 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формат.Но это зависит от того, как вы хотите хранить ваши данные в вашей базе данных.См. Следующее:

>>> 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...