чтение файла CSV python и MySQL не все аргументы, преобразованные во время форматирования строки - PullRequest
0 голосов
/ 28 апреля 2020

Заранее спасибо за ответ на мой вопрос.

Я пытаюсь создать таблицу, прочитать файл CSV, а затем сохранить данные из файла в созданную таблицу. Я продолжаю получать эту ошибку, которую я не знаю, как решить. Я просматривал другие сообщения, но ни одна из них не отвечала на мою проблему.

Файл CSV содержит два столбца и более 3000 строк. Имя первого столбца - #timestamp, а второго столбца - Vehicle1. Вот мой код

import csv
import MySQLdb


mydb = MySQLdb.connect(
        host = "localhost",
        user = "root",
        password = "1111",
        database = "LOAD_PROFILES"

)


mycursor = mydb.cursor()

mycursor.execute("DROP TABLE IF EXISTS Household1")



mycursor.execute("SHOW DATABASES;")



for db in mycursor:
    print(db)



sql = " CREATE TABLE Household1(sx TIMESTAMP NOT NULL, Vehicle1 INT NOT NULL, id INT NOT NULL  AUTO_INCREMENT PRIMARY KEY) AUTO_INCREMENT = 1"
mycursor.execute("SHOW TABLES")
mycursor.execute(sql)

fname=input('file name: ')
if len(fname) < 1 : fname="converted0.csv"
with open(fname) as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    for row in csv_reader:
        print(row)
        res = row[0].split()
        TIMESTAMP = row[0]
        Vehicle1 =row[1]
        data = mycursor.execute('''INSERT INTO Household1 VALUES (%s, %s)''',row)
        mycursor.execute("select * from Household1")
        row = mycursor.fetchall()
mycursor.execute("select * from Household1")
f = mycursor.fetchall()
print(f)
mydb.commit()

Вот ошибка, которую я получаю:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py", line 238, in execute
    query = query % args
TypeError: not all arguments converted during string formatting
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "MySQL_python_Tables.py", line 49, in <module>
    data = mycursor.execute('''INSERT INTO Household1 VALUES (%%s, %%s)''',row)
  File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py", line 240, in execute
    self.errorhandler(self, ProgrammingError, str(m))
  File "/usr/lib/python3/dist-packages/MySQLdb/connections.py", line 52, in defaulterrorhandler
    raise errorclass(errorvalue)
_mysql_exceptions.ProgrammingError: not all arguments converted during string formatting

Любая помощь будет оценена. Спасибо

РЕДАКТИРОВАТЬ:

Оказывается, моя таблица имеет три столбца (последний столбец id), но мой CSV-файл имеет только два столбца. Как только я удалил столбец id, все заработало.

Теперь у меня есть еще одна проблема, python перебирает мой файл, пока не дойдет до "2010-03-14 02:00:00" и выдает эту ошибку:

1292, "Incorrect datetime value: '2010-03-14 02:00:00' for column 'sx' at row 1"

Я просмотрел много постов, и большинство из них говорят, что это связано с DST. Как я могу преодолеть это?

Спасибо

1 Ответ

0 голосов
/ 28 апреля 2020

В этой строке:

mycursor.execute('''INSERT INTO Household1 VALUES (%s, %s)''',row)

у вас есть два заполнителя %s, %s, но только один аргумент row. Число заполнителей должно быть равно количеству аргументов, которые должны быть заключены в кортеж.

...