Witam serdecznie, już od 3 dni walczę z importem danych pobranych z pliku html do dataframe i importem owych danych do bazy MySQL.
Jestem początkujący i raczej z tych co starają się sami rozwiązywać kłopoty, ale trafił mnie taki którego nie rozumiem i zupełnie nie wiem od czego zacząć.
Mój kod wygląda tak:
from datetime import datetime
from administracja import app
import pandas as pd
from pathlib import Path
from config import Config
from sqlalchemy import create_engine
@app.route('/import_danych')
def import_zamowien():
"""Tu nastepuje wgranie danych do bazy"""
folder = Path('C:/Users/Tomek/PycharmProjects/JCCh_flask_v2/raporty/raport_ogolny-dostaw_2021-11-01-2021-11-10_wszyscy.xls')
pobieranie = pd.read_html(folder, header=0, index_col=0) #, flavor='lxml'
pobrane = pobieranie[0]
print(type(pobrane))
for item in pobrane:
item['Data dodania'] = datetime.strptime(item['Data dodania'], "%d.%m.%y").date()
item['Data odbioru'] = datetime.strptime(item['Data odbioru'], '%d.%m.%Y').date()
item['Data dostarczenia'] = datetime.strptime(item['Data dostarczenia'], '%d.%m.%Y').date()
item['Realna data odbioru'] = datetime.strptime(item['Realna data odbioru'], '%d.%m.%Y').date()
item['Realna data dostawy'] = datetime.strptime(item['Realna data dostawy'], '%d.%m.%Y').date()
item['Godzina dodania'] = datetime.strptime(item['Godzina dodania'], 'HH:MM').time()
item['Czas przygotowania (min)'] = datetime.strptime(item['Czas przygotowania (min)'], 'MM:SS').time()
item['Czas na miejscu (odbiór)'] = datetime.strptime(item['Czas na miejscu (odbiór)'], 'HH:MM').time()
item['Czas na miejscu (dostawa)'] = datetime.strptime(item['Czas na miejscu (dostawa)'], 'HH:MM').time()
item['Godzina odbioru'] = datetime.strptime(item['Godzina odbioru'], 'HH:MM').time()
item['Godzina dostarczenia'] = datetime.strptime(item['Godzina dostarczenia'], 'HH:MM').time()
item['Realny czas odbioru'] = datetime.strptime(item['Realny czas odbioru'], 'HH:MM').time()
item['Realny czas dostawy'] = datetime.strptime(item['Realny czas dostawy'], 'HH:MM').time()
item['Numer telefonu odbiorcy'] = datetime.strptime(item['Numer telefonu odbiorcy'], 'HH:MM').time()
item['Numer telefonu odbiorcy'] = float(item['Godzina odbioru'])
item['Dystans dla samochodu(km)'] = float(item['Dystans dla samochodu(km)'])
my_conn = create_engine(Config.SQLALCHEMY_DATABASE_URI, encoding='utf8', echo=True)
query='INSERT INTO jedz_co_chcesz.dane (numer_zamowienia, nazwa_klienta, adres_klienta, telefon_odbiorcy, aders_odbiorcy, dystans, kierowca, data_dodania,godzina_dodania, \
czas_przygotowania,czas_na_miejscu_odbior,czas_na_miejscu_dostawa,data_odbioru, godzina_odbioru, data_dostarczenia, godzina_dostarczenia, kwota, \
oplata_za_dowoz, forma_platnosci, status, realna_data_odbioru, realna_godzina_odbioru, realna_data_dostarczenia, realna_godzina_dostarczenia, \
dodatkowe_1, dodatkowe_2, oplaty_1, oplaty_2, koszt_dowozu, zrodlo \
VALUES(%s,%s,%s,%i,%s,%i,%s,%d,%d,%d,%d,%d,%d,%d,%d,%d,%s,%i,%s,%s,%d,%d,%d,%d,%s,%s,%s,%s,%i,%s)'
my_data=(pobrane['Numer zamówienia'], pobrane['Nazwa klienta'],pobrane['Adres klienta'], pobrane['Numer telefonu odbiorcy'],
pobrane['Adres odbiorcy'], pobrane['Dystans dla samochodu(km)'], pobrane['Kierowca'],pobrane['Data dodania'], pobrane['Godzina dodania'],
pobrane['Czas przygotowania (min)'], pobrane['Czas na miejscu (odbiór)'],pobrane['Czas na miejscu (dostawa)'],pobrane['Data odbioru'],
pobrane['Godzina odbioru'],pobrane['Data dostarczenia'],pobrane['Godzina dostarczenia'],pobrane['Kwota'],pobrane['Opłata za dowóz (jedzcochcesz)'],
pobrane['Forma płatności'],pobrane['Status'],pobrane['Realna data odbioru'],pobrane['Realny czas odbioru'], pobrane['Realna data dostawy'],
pobrane['Realny czas dostawy'],pobrane['Dodatkowe-1'],pobrane['Dodatkowe-2'], pobrane['Opłaty'],pobrane['Opłaty'],pobrane['Koszt dowozu'], pobrane['Źródło'])
my_conn.execute(query,my_data)
pass
Tam na pierwszy rzut oka może zakuć ze plik ma rozszerzenie xls a importowany jest html, to tak ma byc :) Przerabiałem to już w pliku Excel i niestety pracuje na takim dziwnym tworze, no i tak właściwie skrypt tu błędu nie widzi, za to widzi tu:
item['Data dodania'] = datetime.strptime(item['Data dodania'], "%d.%m.%y").date()
TypeError: string indices must be integers
Co to znaczy? To znaczy wiem co to znaczy po polsku ale co to może znaczyć w kontekście stringa przechowującego datę?
Całkowicie mnie to zablokowało, tak właściwie nawet nie miałem jeszcze okazji przetestować reszty tego kodu bo cały czas walczę z tym błędem.
Bardzo proszę o pomoc.