Я извлекаю данные из базы данных MSSQL с помощью pyodbc, который возвращает мой набор данных в списке. Затем эти данные необходимо перенести в базу данных MySQL. Я написал следующую хранимую процедуру в MySQL.
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_int_pmt`(
IN pmtamt DECIMAL(16,10),
IN pmtdt DATETIME,
IN propmtref VARCHAR(128),
IN rtdinv_id INT(11)
)
BEGIN
INSERT INTO ay_financials.payment
(
pmtamt,
pmtdt,
propmtref,
rtdinv_id
)
VALUES
(
pmtamt,
pmtdt,
propmtref,
rtdinv_id
);
END
Процедура работает нормально, если я вставляю одну запись за раз. Итак, сейчас я перебираю список из моего запроса MSSQL и вызываю процедуру для каждой записи. Я использую этот код:
cursor = cnxn.cursor()
cursor.execute(""" SELECT *
FROM [%s].[dbo].[pmt]
WHERE pmtdt BETWEEN '2018-01-01' AND '2018-12-31'""" %(database))
a = cursor.fetchmany(25)
cnxn.close()
import pymysql
# MySQL configurations
un = 'ssssssss'
pw = '****************'
db = 'ay_fnls'
h = '100.100.100.100'
conn = pymysql.connect(host=h, user=un, password=pw, db=db, cursorclass=pymysql.cursors.DictCursor)
cur = conn.cursor()
for ay in a:
cur.callproc('sp_int_pmt',(ay.pmtamt,ay.pmtdt,ay.propmtref,ay.rtdinv_id))
conn.commit()
Проблема, с которой я столкнусь при производстве, состоит в том, что этот список будет содержать 10 000-100 000 каждый день. Перебор этих данных не кажется оптимизированным способом справиться с этим.
Как я могу использовать полный список из запроса MSSQL, вызвать процедуру MySQL один раз и вставить все соответствующие данные?