#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