Цель: у меня есть папка с большим количеством CSV-файлов (через запятую). Я хочу провести l oop через каждый файл и загрузить его в одну таблицу MySQL и включить имя файла в виде столбца в таблице.
Я ожидаю, что код загрузит все содержимое каждого файла. Но он загружает только 1 строку данных для каждого файла. Код взят из книги, поэтому теоретически он должен работать. Я надеюсь, что есть небольшая настройка, необходимая для того, чтобы она работала против необходимости начинать с нуля. Я прочитал несколько других постов, но не нашел эту конкретную c проблему.
Я на Windows 10. Python код ниже. Я не программист или не имел опыта работы с python, но я учусь.
import os
import pandas as pd
from sqlalchemy import create_engine
from tqdm import tqdm_notebook
engine = create_engine('mysql+mysqlconnector://root:root@localhost/myDB')
data_location = 'C://folder//'
def import_file(symbol):
path = data_location + '{}.csv'.format(symbol)
df = pd.read_csv(path, index_col=[0], parse_dates=[0])
# part one
insert_init = """insert into table
(date, ticker, open, high, low, close, volume, dividend)
values
"""
# part two - add values
vals = ",".join(["""('{}', '{}', {}, {}, {}, {}, {}, {}, {})""".format(
str(day),
symbol,
row.open,
row.high,
row.low,
row.close,
row.volume,
row.dividend
) for day, row in df.iterrows()])
# part three - Handle dups
insert_end = """ on duplicate key update
open=values(open),
high=values(high),
low=values(low),
close=values(close),
volume=values(volume),
dividend=values(dividend),"""
# Put the parts together
query = insert_init + vals + insert_end
engine.execute(query)
def process_symbols():
symbols = [s[:-4] for s in os.listdir(data_location)]
for symbol in tqdm_notebook(symbols, desc='Importing...'):
import_file(symbol)
process_symbols()
Таблица MySQL содержит элементы "первой части" кода и использует дату и тикер в качестве первичных ключей.
Я не получаю никаких сообщений об ошибках.
Есть идеи, почему он загружает только 1 строку?
Вывод запроса:
insert into table
(date, ticker, open, high, low, close, volume, dividend)
values
('1999-11-18 00:00:00', 'A', 50.24309847871317, 50.24309847871317, 50.24309847871317, 50.24309847871317, 58425783.68, 0.0)
,('1999-11-19 00:00:00', 'A', 51.092206843003424, 51.092206843003424, 51.092206843003424, 51.092206843003424, 19084157.7, 0.0)
,('1999-11-22 00:00:00', 'A', 50.39224360925426, 50.39224360925426, 50.39224360925426, 50.39224360925426, 8310053.22, 0.0)
,('1999-11-23 00:00:00', 'A', 49.44990865376121, 49.44990865376121, 49.44990865376121, 49.44990865376121, 5328834.84, 0.0)
,('1999-11-24 00:00:00', 'A', 48.609260206647264, 48.609260206647264, 48.609260206647264, 48.609260206647264, 5861663.3999999985, 0.0)
on duplicate key update
open=values(open),
high=values(high),
low=values(low),
close=values(close),
volume=values(volume),
dividend=values(dividend);