pandas to_sql, обновлять только новые строки до mysql db (первичный ключ и дубликаты) - PullRequest
0 голосов
/ 25 ноября 2018

У меня проблемы с обновлением pd до mysql db

for stock_code in cleaned:

    url = 'https://www.hkex.com.hk/chi/sorc/options/statistics_hv_iv_c.aspx?action=csv&type=3&ucode={0}'.format(stock_code)
    df = pd.read_csv(url,index_col='交易日', header=0, skiprows=2)
    df.index.names = ['Trade Date']
    df.index = pd.to_datetime(df.index, dayfirst=True)
    df.insert(loc=0, column ='Stock Code', value=stock_code)
    df.columns = ['Stock Code', 'Implied IV (%)','HV10 (%)','HV30 (%)','HV60 (%)','HV90 (%)']
    df.to_sql(con=database_connection, name='table', if_exists='append')

database_connection.close()

URL предоставит данные в течение ближайших 3 месяцев: т.е.С 2018-08-25 по 2018-11-25, после сегодняшнего дня URL даст данные с 2018-08-26 по 2018-11-26, я хочу сохранить все данные в дБ без дублирования.

Я устанавливаю «Дата сделки» и «Код акций» в качестве первичного ключа, но это приводит к ошибке: (mysql.connector.errors.IntegrityError) 1062 (23000): Дублирующая запись «2018-11-23-00001» для ключа «ПЕРВИЧНЫЙ»'[SQL

Как я могу пропустить повторяющуюся запись и обновлять только новые строки?Большое спасибо!

1 Ответ

0 голосов
/ 25 ноября 2018

Насколько я знаю, у него нет решения для массовой вставки (to_sql).Вы можете попробовать это:

for i in range(len(df)):
  try:
      df.iloc[i:i+1].to_sql(name='table', if_exists='append', con=database_connection)
  except IntegrityError:
      pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...