psycopg2.Ошибка программирования: нет результатов для выборки

#python #postgresql #psycopg2

#python #postgresql #psycopg2

Вопрос:

Я новичок в PostgreSQL.

Мой код использует Postgres через psycopg2:

 try:
    statement = "select wie_scan_id, job_status from jobs where job_id = %s"
    scan = pg_db.get(statement, (job_id, ))
    scan_id = scan[0]["wie_scan_id"]
    
    
except Exception as e:
    logging.error("Error in resuming scan: "  repr(e))
    set_error_on_db(job_id, "Error in resuming scan")
    return
 

где pg_db.get :

     def get(self, statement, data=None, job_id=None):
        logging.debug("Starting get query thread for job id %s", job_id)
        if data:
            self._cursor.execute(statement, data)
        else: 
            self._cursor.execute(statement)

        if "delete from" in statement.lower():
            return

        result = []
        columns = tuple([d[0].decode('utf8') for d in self._cursor.description])
        for row in self._cursor:
            result.append(dict(zip(columns, row)))
        return result
 

и я получаю это исключение:

ERROR, 234, Error in resuming scan: ProgrammingError('no results to fetch',)

есть ли какая-либо ошибка, которую я допускаю при составлении запроса?

Комментарии:

1. Ошибка сообщает вам о проблеме: «нет результатов для выборки». Запрос не находит никаких записей для job_id предоставленных. Вам нужен тест на пустой результат, например. cursor.rowcount == 0

Ответ №1:

Вы перебираете результирующий набор, равный 0, поэтому вы получаете ошибку. Добавьте проверку количества строк в свой код, и это должно предотвратить это, например

 if self._cursor.rowcount != 0:
    for row in self._cursor:
        result.append(dict(zip(columns, row)))
    return result