В настоящее время я пытаюсь выяснить, как проверить, сколько результатов связано с прокси-сервером результатов, когда я запрашиваю свою базу данных.Однако метод rowcount , связанный с результирующим прокси-объектом, дает результат, который я не могу понять:
import sqlalchemy as sql
# Creating the query.
s = sql.select([Observations.timestamp_dt]).where(Observations.ar_id == 2)
# Assuming that the session was already started, execute the statement.
rp = session.execute(s)
# Using rowcount.
rp.rowcount
>>> -1
Затем я проверил информацию, которая может быть полезна, и нашел вопрос , что похоже.Однако, когда я попытался реализовать предложенное решение, я получил ошибку:
# Checking how many rows are associated with rp.
rowcount = len(rp._saved_cursor._result.rows)
>>> AttributeError: 'sqlite3.Cursor' object has no attribute '_result'
Функция help () или документация действительно не предоставили информациюЯ мог бы использовать, чтобы получить количество строк, которое имеет этот результирующий прокси-объект.Я также попытался:
rp._saved_cursor.rowcount
>>> -1
rp._saved_cursor.lastrowid
>>> 0
Что бесполезно, учитывая, что мне нужно знать, сколько раз мне нужно будет пройти через этот объект.
Причина, по которой я хотел бы заранее узнать количество результатов, состоит в том, чтобы я мог знать, сколько кадров и, следовательно, время, которое будет использоваться rp.fetchone () для подачиизображения в matplotlib FuncAnimation .Я ищу число, которое нужно присвоить аргументу frames в приведенном ниже коде:
def and_animation(ar_id, tstart, tstop):
# Making the session.
session = sup_unit.mainsession()
# Loading the mock data with the correct dimensions.
s = sql.select([ActiveRegion.columnshape, ActiveRegion.rowshape]).where(ActiveRegion.AR_id == ar_id)
dimensions = session.execute(s).fetchone()
# Load the data here.
s = sql.select([Observations.timestamp_dt, Observations.d4vm_vz]).where(sql.and_(Observations.ar_id == ar_id,
Observations.timestamp_int > tstart,
Observations.timestamp_int < tstop))
rp = session.execute(s)
files = rp.fetchall()
# Creating the figure objects.
fig, ax = plt.subplots(figsize=(14,8))
# Creating an image to start.
img = plt.imshow(ajuste(files[0][1], dimensions[0]), origin='lower',
cmap='RdBu',
vmax=1,vmin=-1 ,animated=True)
plt.colorbar(shrink=0.75)
def refresher(frame_number, img, files):
# Preparing the new data
new_data = ajuste(files[frame_number+1][1], dimensions[0])
#setting the new data
img.set_data(new_data)
plt.title(f'{files[frame_number][0]}')
return(img,)
ani = FuncAnimation(fig, refresher,
frames=range(len(files)-1), blit=True,
fargs = [img, files])
ani.save("vz.mp4")
#plt.show()
return
Таким образом, вместо использования rp.fetchall () Я могу сделать одно изображение для каждого взаимодействия, предотвращая процесс использования памяти подкачки или даже сбой, если количество изображений слишком велико.
Спасибо.