MySQL python实现(六)

事件

事件调度器简称事件,是定时触发执行的,是由一个特定的线程来管理的
事先准备,连接指定数据库

import pymysql

db = pymysql.connect('localhost','root','111','library')
cursor = db.cursor()

一、查看事件是否开启

首先需要指定一个数据库,否则会报错Error 2006(HY000)错误
首先查看

sql = "show variables like 'event_scheduler';"
cursor.execute(sql)
result = cursor.fetchall()
print(result)

在这里插入图片描述
在这里插入图片描述
由于value的值为off,所以事件没有开启
再次查看@@event_scheduler变量的值

sql1 = "select @@event_scheduler;"
cursor.execute(sql1)
result = cursor.fetchall()
print(result)

在这里插入图片描述
在这里插入图片描述
最后查看processlist

sql2 = "show processlist;"
cursor.execute(sql2)
result = cursor.fetchall()
print(result)

在这里插入图片描述
在这里插入图片描述
由于在processlist表中没有查到event_scheduler的信息,说明事件没有开启;
如果参数event_scheduler的值为on,或者在processlist表中查询到了event_scheduler的信息,则说明事件已经开启。

二、开启事件

①通过设置全局参数修改

# set global可以开启或关闭事件
sql3 = "set global event_scheduler = ON;"
sql = "show variables like 'event_scheduler';"
cursor.execute(sql3)
cursor.execute(sql)
result = cursor.fetchall()
print(result)

在这里插入图片描述
此操作只是占时的开启事件,如果想始终开启,可以更改配置文件。
②更改配置文件
在my.ini/my.cnf中添加event_scheduler=on,重启MySQL服务器才生效

三、创建事件

create
[definer = {user | current_user }]
EVENT [if not exists ] event_name
on SCHEDULE schedule
[on completion [not] preserve]
[enable | disable |disable on slave]
[comment ‘comment’]
do event_body;
on SCHEDULE子句中,参数schedule的值为一个as子句,用于指定事件在某个时刻发生
at timestamp [+ INTERVAL interval]…
| EVERY interval
[STARTS timestamp [+ INTERVAL interval] …]
[ENDS timestamp [+ INTERVAL interval] … ]
timestamp:表示一个具体的时间点,后面加上一个时间间隔,表示在这个时间间隔后事件发生
EVERY子句:表示事件在指定时间区域间每隔多长时间发生一次,start指定开始时间,end指定结束时间
interval:从现在开始的时间,其值由一个数值和单位构成
interval参数值
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

# 在当前数据库中创建一个名为e_test的事件,每隔5秒向数据表user中插入数据
# 由于在连接服务器的时候指定了数据库,这里就不再打开数据库
 sql = "create table tb_eventtest(\
        id int(11) primary key auto_increment not null,\
        createtime varchar(30) not null, \
        user varchar(25) not null);"
cursor.execute(sql)
# 创建一个tb_eventtest基本表,向该表中每5秒插入一条数据
sql4 = "create event if not exists e1_test on schedule every 5 second\
        on completion preserve \
        do insert into tb_eventtest(user,createtime)\
        values('xiao',now());"
cursor.execute(sql4)
sql5 = "select * from tb_eventtest;"
cursor.execute(sql5)

在这里插入图片描述

四、修改事件

create
[definer = {user | current_user }]
EVENT event_name
[on SCHEDULE schedule]
[on completion [not] preserve]
[rename to new_event_name]
[enable | disable |disable on slave]
[comment ‘comment’]
[do event_body]
alter event可以让一个时间关闭或再次让其活动

# 修改事件e1_event
sql = "alter event e1_test on schedule every 30 second\
       on completion preserve \
       do insert into tb_eventtest(user,createtime) \
       values('xuan',now());"
cursor.execute(sql)
sql1 = "select * from tb_eventtest;"
cursor.execute(sql1)

在这里插入图片描述
临时关闭事件

临时关闭事件

sql = “alter event e1_test disable;”
cursor.execute(sql)
sql1 = “select * from tb_eventtest;”
cursor.execute(sql1)
在这里插入图片描述
在这里插入图片描述
即关闭事件后,不再继续向数据表tb_eventtest中插入数据。

五、删除事件

# 删除事件
sql = "drop event if exists e_test;"
cursor.execute(sql)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值