首页 > 解决方案 > 如何调试连接或游标对象?

问题描述

我面临一个奇怪的问题,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。

我相信问题可能出在连接或光标上,但我不知道如何确保它们正常

标签: pythonpostgresqlpsycopg2

解决方案


您不确定连接是否仍然正常工作。要对此进行调试,请创建一个连接,然后立即调用该check_dependency函数两次。如果第二次调用失败,我们可能会将其归咎于连接,但如果第一次调用失败,那么您将需要修改函数。


推荐阅读