es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La tabla de PostgreSQL existe pero Python dice que no.

Soy nuevo en Python y aunque parece un error tonto, no puedo descubrir qué estoy haciendo mal. Cualquier sugerencia o pista será muy útil. Y también, si esta pregunta ha sido respondida antes, por favor, enlace a eso.

Estoy escribiendo un script simple en Python que se conectará a la base de datos. Ahora en esa base de datos estoy verificando que la tabla test_run exista. Si existe, simplemente imprime que existe, si no, crea la tabla.


<h1>Conectar al servidor de la base de datos, ahora con la DB creada</h1> p>try: connection = psycopg2.connect(user="postgres", password="postgres", host="127.0.0.1", port="5432", database="dashboard") except (Exception, psycopg2.Error) as error: print("Conexión no establecida", error) <h1>Verificar si la Tabla test_run Existe</h1> <p>cursor = connection.cursor() if bool(cursor.execute("SELECT EXISTS(SELECT * FROM information<em>schema.tables WHERE table</em>name='test<em>run')")): print('test</em>run table existe. Continuando.') else: print('test<em>run no existe. Creando la tabla ahora.') cursor.execute("CREATE TABLE test</em>run (run<em>id serial PRIMARY KEY, date date, status varchar(255), " "total</em>time integer, project_name varchar(255));")</p>

Ahora en la base de datos, la tabla test_run está presente y cuando ejecuto el comando SELECT EXISTS obtengo un true.

Ahora, cuando ejecuto el script anterior, se ejecuta la condición else, lo que indica que la tabla test_run no existe. Pero idealmente, la condición if debería ejecutarse ya que la tabla sí existe.

Captura de pantalla de pgadmin

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en el uso de la función bool() alrededor del método cursor.execute(). El método cursor.execute() devuelve None y, por lo tanto, bool(None) es False. Por lo tanto, aunque la tabla test_run existe, la condición if no se cumple y se ejecuta el bloque else.

    Para solucionar esto, elimine la función bool() y simplemente use el método cursor.fetchone() para obtener el resultado de la consulta SELECT EXISTS. Así es como se vería el código actualizado:

    # Conectarse al servidor de base de datos, ahora con la base de datos creada
    try:
        connection = psycopg2.connect(user="postgres", password="postgres", host="127.0.0.1", port="5432",
                                      database="dashboard")
    except (Exception, psycopg2.Error) as error:
        print("No se pudo establecer la conexión", error)
    
    
    # Verificar si la tabla test_run existe
    cursor = connection.cursor()
    cursor.execute("SELECT EXISTS(SELECT * FROM information_schema.tables WHERE table_name='test_run')")
    exists = cursor.fetchone()[0]
    if exists:
        print('La tabla test_run existe. Continuando.')
    else:
        print('La tabla test_run no existe. Creando la tabla ahora.')
        cursor.execute("CREATE TABLE test_run (run_id serial PRIMARY KEY, date date, status varchar(255), "
                       "total_time integer, project_name varchar(255));")
    

    ¡Espero que esto ayude! Si tienes más preguntas o inquietudes, no dudes en preguntar.

Comments are closed.