Как обновлять / вставлять (вставлять) большой кусок таблицы с помощью панд - PullRequest
0 голосов
/ 01 апреля 2019

Существует большая таблица, которую нужно перенести (обновить / вставить), используя библиотеку Python Pandas с новым фреймом данных (который содержит последние данные).

Я мог бы сделать это, учитывая всю таблицу. Нотак как таблица тяжелая и в будущем будет становиться все тяжелее, я ищу варианты вставки по частям в таблице.

Ниже приведен текущий код для сохранения таблицы. data_frame2 - новый фрейм данных (содержит последние данные).

engine = create_engine("mysql+pymysql://username:password@hostname/schema")
con = engine.connect()
sql1 = "select * from table1"
df1 = pd.read_sql(sql1, con)
#(upsert code starts),can below code be converted into chunkwise upsert
#data_frame2 is the data frame with latest data/new data.
df_final = pd.concat([df1, data_frame2[~data_frame2.index.isin(df1.index)]])
df_final.update(data_frame2)
#upsert code ends
#writing data chunkwise
df_final.to_sql(con=con,name='table1',if_exists='replace',chunksize=100000)

Я исследовал в Интернете, но не смог найти способ, которым мы можем сделать продольное (обновление / вставка) по кусочкам таблицы с новыми данными в панде dataframe. Пожалуйста, предложите, как это можно сделать..

1 Ответ

1 голос
/ 01 апреля 2019

Это скорее задача базы данных, чем задача python. Если данные растут, как ваша локальная память сможет справиться с этим? Так что тяжелая часть должна быть сделана на сервере моего SQL, чтобы вам не нужно было загружать данные и делать какие-либо обновления. Итак, чтобы сделать то, что вам нужно:

  • Создать временную / промежуточную таблицу (например, table2) в базе данных со столбцами df1 и ограничить
  • Вставить df1 во временную таблицу2 в базе данных
  • создать объект БД и курсор, используя соединитель mysql

    import pymysql
    
    conn = pymysql.connect(host='', port='', user='', passwd='', db='')
    
    cur = conn.cursor()
    sql_update_string = "update ..." # join table1 and table2 and update the common ids in table1
    
  • Выполнить задачу обновления с помощью курсора Python и закрыть курсор

    cur.execute(sql_update_string)
    cur.close()
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...