Вызов процедуры mysql с использованием pymysql

#python #mysql #pymysql

Вопрос:

У меня есть процедура под названием » мой » в mysql. Запрос выглядит следующим образом

 CREATE DEFINER=`as`@`%` PROCEDURE `my`()
BEGIN
    delete from my1 where datediff(curdate(), Date_) <= 20;
    insert into my1
            select
                t.idx auto_increment,
                t.date_ as 'Date_',
                t.brand as 'Br',
                concat(t.so_, '_', t.me_) as 'Md'
                from 
                    (select idx, date_, brand, so_, me from md where datediff(curdate(), Date_) <= 20) as t
                group by t.date_, t.br;
END
 

Чтобы запустить эту процедуру на Python, я написал следующий код, используя pymysql.

 user = 'xxxx'
passw = 'xxxxx'
host = 'xxxx'
port = 3306
database = 'DBxxxx'
conn = pymysql.connect(host=host,
                       port=port,
                       user=user,
                       password=passw,
                       database=database,
                       charset='utf8',
                       local_infile=1)
    try:
        with conn.cursor() as cursor:
              cursor.callproc('my')
              conn.commit()
              conn.close()
    except:
        conn.close()
 

Но это не очень хорошо работает. Есть ли какие-либо ошибки в коде, который я написал? Процедура, которую я запускаю в mysql, работает нормально

Комментарии:

1. delete from my1 where datediff(curdate(), Date_) <= 20; — Старайтесь не использовать столбец в выражении, это снижает производительность, используйте форму условия, например delete from my1 where Date_ >= curdate() - interval 20 day; (используйте «очистить», неизмененное значение столбца). В этом случае выражение curdate() - interval 20 day является константой, оно вычисляется один раз, и Date_ может использоваться индекс by (если он существует). А не в вашем запросе.

2. Была ли та часть, где я написал pymysql правильно?

3. Я не использую python…