Не удается подключится к postgreSQL

Рейтинг: 1Ответов: 1Опубликовано: 17.06.2023

У меня такой код подключения к posrtgreSQL в Python Выдает ошибку: NameError: name 'connection' is not defined Подскажите, где я не прав?

try:
    with psycopg2.connect(host=host,
        user=user,
        password=password,
        database=db_name,
        port=port) as connection:

        with connection.cursor() as cursor:
            cursor.execute("SELECT version();")
            print(f"Server version: {cursor.fetchone()} ")
        connection.close()
        print('[INFO] PostgreSQL connection closed')

except Exception as _ex:
    print('[INFO] Error while working with postgreSQL', _ex)


[INFO] Error while working with postgreSQL 
[INFO] Error while working with postgreSQL 

Ответы

▲ 0

Я бы рекомендовал больше использовать with, хотя там есть некоторые тонкости, посмотрите https://www.psycopg.org/docs/usage.html#with-statement, А имеющийся простой пример записал бы так:

import psycopg2
try:
    with psycopg2.connect("тут все параметры...") as connection:
        with connection.cursor() as cursor:
            cursor.execute("SELECT version();")
            print(f"Server version: {cursor.fetchone()} ")
        connection.close()
        print('[INFO] PostgreSQL connection closed')

except Exception as _ex:
    print('[INFO] Error while working with postgreSQL', _ex)

UPD: Более корректный вариант предложил @Alpensin, только там не понятно, куда вставить print про закрытие, чтобы он был выведен точно после закрытия :)

import psycopg2
from contextlib import closing

try:
    with closing(psycopg2.connect()) as connection:
        with connection.cursor() as cursor:
            cursor.execute("SELECT version();")
            print(f"Server version: {cursor.fetchone()} ")

except Exception as _ex:
    print('[INFO] Error while working with postgreSQL', _ex)