Python Живые данные выборки в реальном времени из Mysql Таблицы - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь прочитать последнюю строку из таблицы и построить график, используя animate и matplotlib в python. Таблица обновляется каждую 1 секунду с новым значением. Мне нужно смоделировать график путем построения графиков значений. Однако, когда я использую функцию анимации с интервалом в 1 секунду, я получаю одно и то же значение для каждой выборки за интервал.

Я добавляю код для вашей справки. Пожалуйста, дайте мне знать, что мне не хватает. Тот же код работает хорошо, когда я использую плоский файл вместо MySql таблицы.

import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib import style
import mysql.connector
import pandas as pd

style.use('fivethirtyeight')

mydb = mysql.connector.connect(
  host="xxxxxxxxxx",
  user="xxxxx",
  passwd="xxxxxxx",
  database="sakila"
)


fig = plt.figure(figsize=(8,5))
ax = plt.subplot2grid((1,1), (0,0))
plt.ion()
cursor = mydb.cursor()

def animate(i):

    df = pd.read_sql("SELECT * FROM DATA_TEST ORDER BY ID DESC LIMIT 1", mydb)
    y = df["VALUE"]
    x = df["ID"]
    xs = []
    ys = []
    xs.append(x)
    ys.append(float(y)*100)
    ax.clear()
    ax.plot(xs,ys)

ani = animation.FuncAnimation(fig, animate, interval=1000)
plt.show()


## TESTING CURSOR IN FOR LOOP
import mysql.connector
import pandas as pd
import time


mydb = mysql.connector.connect(
  host="xxxxxxx",
  user="xxxx",
  passwd="xxxxxx",
  database="xxxxx"
)



for i in range(10):
    cursor = mydb.cursor()

    cursor.execute("SELECT * FROM DATA_TEST ORDER BY ID DESC LIMIT 1")
    result = cursor.fetchall()
    print("Total rows are:  ", len(result))
    for j in result:
        print(j[0])
        print(j[1])
    time.sleep(10)
    cursor.close()

...