#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…