С помощью mysql-соединителя вы можете использовать executemany()
, но я не уверен, что pandas это поддерживает. Этот пост может помочь: как преобразовать pandas dataframe для вставки с помощью оператора executemany ()?
df = [['Euro', 0.877641, '2018-10-24'], ['British Pound', 0.7752180000000001, '2018-10-24'], ['Indian Rupee', 73.21869000000001, '2018-10-24'], ['Australian Dollar', 1.4135360000000001, '2018-10-24'], ['Canadian Dollar', 1.299316, '2018-10-24']]
Чтобы получить самую последнюю дату df
:
date_list = []
for x in df:
date_list.append(x[-1])
latest = max(date_list)
# turn into datetime format, not str
latest = datetime.datetime.strptime(latest, '%Y-%m-%d').date()
# increase by one day
next_day = latest + datetime.timedelta(days=1)
Я не знаю, как выглядит ваш SQL-запрос, но вы можете сделать что-то вроде следующего, чтобы получить данные со следующего дня:
latest_date_query_results = cursor.execute(
"""
SELECT currency, value, added_date
FROM your_table
WHERE added_date > {}
""".format(next_day)
)
Результаты должны быть превращены в кортеж для работы с executemany()
elements = []
for x in df:
elements.append(tuple((x)))
elements = tuple((elements))
print(elements)
# (('Euro', 0.877641, '2018-10-24'), ('British Pound', 0.7752180000000001, '2018-10-24'), ('Indian Rupee', 73.21869000000001, '2018-10-24'), ('Australian Dollar', 1.4135360000000001, '2018-10-24'), ('Canadian Dollar', 1.299316, '2018-10-24'))
Тогда вы можете сделать это:
sql = "INSERT INTO TestCurrencyHistory (currency, date, value) VALUES (%s, %s, %s)"
cursor.executemany(sql, elements)