Как отладить соединение или объекты курсора? - PullRequest
0 голосов
/ 11 апреля 2020

Я сталкиваюсь со странной проблемой, когда result = cursor.fetchone() возвращает None при наличии данных в БД.

Пожалуйста, позвольте мне объяснить, почему это странно, я создал одно соединение

connection = psycopg2.connect(
            user=environ["DB_USER"],
            password=environ["DB_PASS"],
            host=environ["DB_HOST"],
            port=environ["DB_PORT"],
            database=environ["DB_NAME"],
        )

Затем я передаю это соединение функции, эта функция создает курсор, выполняет несколько запросов, закрывает курсор и возвращает результат. В этот момент соединения работают, курсор работает. Затем я передаю то же соединение другой функции, и вот здесь у меня проблема:

def check_dependency(connection, uuid):
    cursor = connection.cursor()
    tablename = environ["PIPILE_NAME"]

    sql_str = f"SELECT * FROM {tablename} "
    sql_str += "WHERE uuid = %s "
    sql_str += "AND NOT decrypt_status;"

    cursor.execute(sql_str, (uuid,))
    result = cursor.fetchone()
    cursor.close()
    print(sql_str, uuid, result)  #<-- this output
    return result

Я скопировал вывод, запустил его непосредственно в postgresql и вернул ожидаемую строку, но функция возвращает None.

Я полагаю, что проблема может быть связана с соединением или курсором, но я не знаю, как убедиться, что они в порядке

1 Ответ

0 голосов
/ 11 апреля 2020

Вы не уверены, работает ли соединение по-прежнему правильно. Чтобы отладить это, создайте соединение и сразу же дважды вызовите функцию check_dependency. Если 2-й вызов завершится неудачно, мы можем обвинить его в соединении, но если 1-й вызов не удастся, вы захотите пересмотреть функцию.

...