Предположим, у меня есть таблица X
в MySQL следующим образом
A B
1 2
3 4
5 6
и у меня есть фрейм данных df
следующим образом
A B
1 2
5 6
7 8
9 10
Я хочу добавить в X
только новые строки из df
(строки, которые есть в df
, но не в X
). Результаты должны быть:
A B
1 2
3 4
5 6
7 8
9 10
Обратите внимание, что сортировка не имеет значения для меня. В настоящее время, что я могу сделать, это
1. Read table X and store in a dataframe called dfx
2. Concat df and dfx
3. Drop duplicate rows
4. Insert the results back to the table X with to_sql(if_exist='replace')
Однако я думаю, что это не очень хорошая практика, особенно когда таблица X очень большая. Могу ли я получить ваши предложения по лучшему пути? Спасибо
Если ваши индексы уникальны (или один из столбцов, скажем, A), вы можете
Вам нужно будет использовать что-то вроде sqlalchemy
для (2). (3) можно легко сделать с помощью DataFrame.query
; например df.query("A == @list_of_new_values")
, где list_of_new_values
— список Python с новыми значениями для столбца A.
Если у вас есть уникальный индекс в вашей таблице, который не позволит вам вставлять повторяющиеся записи (первичный ключ должен сделать эту работу), то будет достаточно использовать INSERT IGNORE
вместо INSERT
: повторяющиеся записи будут молча отбрасываться, а не генерировать ошибку.