Быстрая пакетная вставка уникальных значений в таблицу mariadb
Как правильно реализовать быструю пакетную вставку уникальных записей в таблицу mariadb? Хотелось бы избежать вставку в цикле с проверкой на наличие существующей записи по полям (pair, datatetime, action, price).
К примеру в таблице table1 есть записи
pair, datatetime, action, price
eth/btc, 2020-01-01 20:30:10, sell, 0.1
Требуется сделать пакетную вставку
eth/btc, 2020-01-01 20:30:10, sell, 0.1 (не вставлять, пропустить поскольку есть запись в table1)
ltc/btc, 2020-02-01 20:35:10, buy, 0.5
eth/btc, 2020-01-01 21:30:10, buy, 0.1
ltc/btc, 2020-02-01 20:35:10, buy, 0.5 (не вставлять, пропустить поскольку запись в table1 появиться при ставке 2 записи)
Ожидаемый результат
pair, datatetime, action, price
eth/btc, 2020-01-01 20:30:10, sell, 0.1
ltc/btc, 2020-02-01 20:35:10, buy, 0.5
eth/btc, 2020-01-01 21:30:10, buy, 0.1
Ответы (2 шт):
Автор решения: Yuriy Tigiev
→ Ссылка
В случае mysql и maridb нужно использовать оператор ignore при вызове insert into
Автор решения: Namerek
→ Ссылка
# в коде использована pymysql
data = [
['eth/btc', '2020-01-01 20:30:10', 'sell', 0.1],
['ltc/btc', '2020-02-01 20:35:10', 'buy', 0.5],
['eth/btc', '2020-01-01 20:30:10', 'buy', 0.1],
['ltc/btc', '2020-02-01 20:35:10', 'buy', 0.5]
]
db.cursor.executemany(
"insert ignore into table1 (pair, datatetime, action, price) values (%s, %s, %s, %s, %s)",
data
)