1 需求描述
监测每张表的状态变更情况,主要有三个字段 schema,version和status。
其中schema表示一张表,version表示表的版本,表每变更一次版本加1,status表示表的状态 1表示有效,-1表示失效。
下面用简易版实例展示实现过程。
2 需求实现
2.1 建表
CREATE TABLE `test_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`schema` text,
`version` int(11) DEFAULT NULL,
`status` tinyint(4) DEFAULT '0' COMMENT '-1:过期;1:有效',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8mb4
2.2 mysql命令行实现
INSERT INTO test_table (`schema`,VERSION, STATUS) VALUES ('user',1,1);
SELECT MAX(id) INTO @maxid FROM test_table WHERE `schema`='user';
UPDATE test_table SET STATUS=-1 WHERE id < @maxid AND `schema`='user';
SELECT MAX(VERSION) INTO @maxversion FROM test_table WHERE `schema`='user';
SET @rownum=@maxversion;
UPDATE test_table SET VERSION =@rownum+1 WHERE id = @maxid AND `schema`='user'
2.3 pymysql实现
import pymysql
def db_count(db_name,table_name):
# 显示有多少条记录
db = pymysql.connect(host='127.0.0.1', user='root', passwd='xxxxxx', db=db_name, charset='utf8')
cursor = db.cursor()
#cursor.execute(query)
cursor.execute("INSERT INTO test_table (`schema`,VERSION, STATUS) VALUES ('user',1,1);")
cursor.execute("SELECT MAX(id) INTO @maxid FROM test_table WHERE `schema`=%s;",age)
cursor.execute("UPDATE test_table SET STATUS=-1 WHERE id < @maxid AND `schema`=%s;",age)
cursor.execute("SELECT MAX(VERSION) INTO @maxversion FROM test_table WHERE `schema`=%s;",age)
cursor.execute("SET @rownum=@maxversion;")
cursor.execute("UPDATE test_table SET VERSION =@rownum+1 WHERE id = @maxid AND `schema`=%s;",age)
db.commit()
cursor.close()
# 关闭数据库
db.close()
if __name__=='__main__':
db_name = 'test' #mysql数据库名
table_name = 'test_table' #mysql数据表名
age = 'user'
db_count(db_wm,db_nm)