Как получить число результатов, связанных с прокси-объектом результатов sqlalchemy, до получения результатов? - PullRequest
0 голосов
/ 07 марта 2019

В настоящее время я пытаюсь выяснить, как проверить, сколько результатов связано с прокси-сервером результатов, когда я запрашиваю свою базу данных.Однако метод 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 () Я могу сделать одно изображение для каждого взаимодействия, предотвращая процесс использования памяти подкачки или даже сбой, если количество изображений слишком велико.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...