import pymysql import time # 连接MySQL数据库 conn = pymysql.connect(host='localhost', user='root', password='root', database='java') # 获取进程列表 def get_process_list(): cursor = conn.cursor() cursor.execute('SHOW FULL PROCESSLIST') result = cursor.fetchall() process_list = [] for row in result: process = { 'id': row[0], 'user': row[1], 'host': row[2], 'db': row[3], 'command': row[4], 'time': row[5], 'state': row[6], 'info': row[7] } process_list.append(process) return process_list # 实时监控 while True: process_list = get_process_list() for process in process_list: if process['command'] == 'Query' and process['state'] == 'executing': print('执行SQL语句:', process['info'], '开始时间:', time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(process['time']))) # 间隔1秒 time.sleep(1) # 关闭数据库连接 conn.close() 我再Navicat中执行了sql查询语句前面的python代码还是没有检测到执行的sql语句并输出
时间: 2024-03-15 18:43:36 浏览: 12
这很奇怪,因为这段代码能够实时监控MySQL数据库中正在执行的SQL语句。可能是因为Navicat和这段代码使用的连接方式不同,导致这段代码无法监控到Navicat执行的SQL语句。你可以尝试在命令行中使用mysql客户端执行SQL语句,看看是否能被监控到。如果还是无法监控到,那可能是代码中的某些条件判断有问题,你可以尝试打印出所有进程的信息,看看是否有其他问题。或者你可以尝试修改代码,使用PyMySQL的binlog监听功能来实现实时监控数据库。
相关问题
conn = pymysql.connect
这是Python中使用pymysql库连接MySQL数据库的代码。你可以先安装pymysql库,然后在代码中使用以下语句连接数据库:
```python
import pymysql
# 建立数据库连接
conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='password', db='database_name', charset='utf8')
# 关闭数据库连接
conn.close()
```
其中,`host`指定数据库主机地址,`port`指定数据库端口号,`user`和`passwd`指定连接数据库的用户名和密码,`db`指定要连接的数据库名称,`charset`指定字符编码。你需要根据实际情况进行修改。
import pymysql import time # 连接MySQL数据库 conn = pymysql.connect(host='localhost', user='root', password='root', database='java') # 获取进程列表 def get_process_list(): cursor = conn.cursor() cursor.execute('SHOW FULL PROCESSLIST') result = cursor.fetchall() process_list = [] for row in result: process = { 'id': row[0], 'user': row[1], 'host': row[2], 'db': row[3], 'command': row[4], 'time': row[5], 'state': row[6], 'info': row[7] } process_list.append(process) return process_list # 实时监控 while True: process_list = get_process_list() for process in process_list: if process['command'] == 'Query' and process['state'] == 'executing': print('执行SQL语句:', process['info'], '开始时间:', time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(process['time']))) # 间隔1秒 time.sleep(1) # 关闭数据库连接 conn.close()这个代码跑起来 我再其它地方执行sql语句这里也没有输出
这段代码是一个实时监控MySQL数据库中正在执行的SQL语句的程序。它通过连接MySQL数据库,获取进程列表,判断进程的命令和状态,如果正在执行的是SQL语句,则输出相关信息。如果你在其他地方执行SQL语句,但这里没有输出,可能是因为你的SQL语句执行得太快了,没有被监控到。你可以尝试在执行SQL语句时加上一些sleep等待时间,看看是否能被监控到。或者你可以尝试修改代码,打印出所有进程的信息,看看是否有其他问题。