Посмотрите на пункт UNPIVOT - я не уверен, что он применим для вашего случая, но в некоторых случаях его можно использовать для запроса значения по имени столбца без динамического SQL:
create table t1 (
a int,
b int,
c int
);
insert into t1 values
(1, 11, 111),
(2, 22, 222),
(3, 33, 333);
select a, col_name, col_value from t1
unpivot (col_value for col_name in (b, c)) as dt;
Результат:
| a | col_name | col_value |
|---|----------|-----------|
| 1 | b | 11 |
| 1 | c | 111 |
| 2 | b | 22 |
| 2 | c | 222 |
| 3 | b | 33 |
| 3 | c | 333 |
( SQL Fiddle )
Если вам нужно только значение в a
в зависимости от какое-либо условие (динамически) либо b
, либо c
, вы можете построить на нем условие. Если вам нужны значения в столбце b
или c
, вы можете добавить ... WHERE col_name = ?
. Если вам нужно больше столбцов, вам, вероятно, нужно будет отфильтровать значения столбцов в таблице без поворота, чем развернуть его снова, чтобы вернуть значения в столбцах.
Вы можете использовать animation.FuncAnimation
. Разделите график штрихов один раз и сохраните возвращаемое значение, которое представляет собой набор Rects:
rects = plt.bar(range(N), x, align='center')
Затем, чтобы изменить высоту полосы, вызовите rect.set_height
:
for rect, h in zip(rects, x):
rect.set_height(h)
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def animate(frameno):
x = mu + sigma * np.random.randn(N)
n, _ = np.histogram(x, bins, normed=True)
for rect, h in zip(patches, n):
rect.set_height(h)
return patches
N, mu, sigma = 10000, 100, 15
fig, ax = plt.subplots()
x = mu + sigma * np.random.randn(N)
n, bins, patches = plt.hist(x, 50, normed=1, facecolor='green', alpha=0.75)
frames = 100
ani = animation.FuncAnimation(fig, animate, blit=True, interval=0,
frames=frames,
repeat=False)
plt.show()
Если matplotlib не является принудительным вариантом, я бы порекомендовал систему Push Socket на сервере и основанную на Javascript графику для клиентской стороны. Сначала я перечислю несколько преимуществ:
Так как я делаю что-то очень похожее на мою малину, я могу поделитесь своими сведениями о том же. Это вдохновлено этой записью в блоге. Код для серверной стороны, который подталкивает данные, можно найти здесь здесь . Вероятно, вы увидите, что после установки зависимостей он очень похож на ваш код, и в конечном итоге вы найдете socket.send()
даже в моем коде. Для стороны клиента этот является ссылкой на файл HTML, а этот - это JS, который запускается в браузере, который использует Flot Plotting библиотека. Я уверен, что демонстрация на их домашней странице достаточно удивительна, чтобы ее заметили!