Проблема с разметкой даты при импорте файла .csv в базу данных MySQL - PullRequest
0 голосов
/ 01 апреля 2020

Поскольку я живу в Германии, несколько сотен дат в моем файле .csv имеют другой формат, чем даты в США и США, так как моя - «ДД-ММ-ГГГГ», и мне нужно преобразовать каждую из них в «ГГГГ-ММ» -dd». Теперь на мой вопрос. Как я могу конвертировать это? Прямо сейчас я получаю следующую ошибку:

TypeError: не все аргументы преобразованы во время форматирования строки

Мой используемый код в данный момент (все еще работает над ним):

#!/usr/bin/python

import csv
import pymysql

mydb = pymysql.connections.Connection(host='localhost', user='user', password='password', database='database', unix_socket="/var/run/mysqld/mysqld.sock", port=3306)

cursor = pymysql.cursors.Cursor(mydb)

csv_data = csv.reader(file('wetterdaten_neu.csv'))

for row in csv_data:
    cursor.execute('INSERT INTO sensoren(date,temp,gartemp,tempdallas,pressure,height,pressurenn,tempdallas2,humidity,taup)''VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)',row)
    print row

mydb.commit()
cursor.close()
print "CSV has been imported into the database"

Надеюсь, вы мне поможете.

Ответы [ 2 ]

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

Перед вызовом в cursor.execute() вы можете преобразовать значение даты в row, используя datetime.strptime():

# Используя datetime.strptime ()

dt = datetime.strptime ("21/11/06 16:30", "% d /% m /% y% H:% M")

Это установит dt = datetime.datetime ( 2006, 11, 21, 16, 30). Затем вы можете вывести любой формат, который вам нужен для вашей базы данных. Конечно, вы должны заменить строку даты выборки на значение row['date'].

Метод создания форматированной строки будет выглядеть следующим образом:

dt.strftime("%Y-%m-%d")

РЕДАКТИРОВАТЬ: Для пояснения, ваш код будет выглядеть примерно так:

import datetime
for row in csv_data:
    # First convert date string into a datetime object
    dt = datetime.strptime(row[0], "%d-%m-%Y")
    # Then save the correctly formatted date string back to the row array
    row[0] = dt.strftime("%Y-%m-%d")
    cursor.execute('INSERT INTO sensoren(date,temp,gartemp,tempdallas,pressure,height,pressurenn,tempdallas2,humidity,taup) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)',row)
    print row
0 голосов
/ 01 апреля 2020

Может быть, вы могли бы изменить эту строку своего кода:

cursor.execute('INSERT INTO sensoren(date,temp,gartemp,tempdallas,pressure,height,pressurenn,tempdallas2,humidity,taup)''VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)',row)

на:

cursor.execute('INSERT INTO sensoren(DATE_FORMAT(STR_TO_DATE(date, "%m-%d-%Y"), "%Y-%m-%d"),temp,gartemp,tempdallas,pressure,height,pressurenn,tempdallas2,humidity,taup)''VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)',row)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...