pymysql监测表schema

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)

2.4 实现效果

原文地址:https://www.cnblogs.com/eugene0/p/13855667.html