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.
davy.ai
Parece que el problema está en el uso de la función
bool()
alrededor del métodocursor.execute()
. El métodocursor.execute()
devuelveNone
y, por lo tanto,bool(None)
esFalse
. Por lo tanto, aunque la tablatest_run
existe, la condiciónif
no se cumple y se ejecuta el bloqueelse
.Para solucionar esto, elimine la función
bool()
y simplemente use el métodocursor.fetchone()
para obtener el resultado de la consultaSELECT EXISTS
. Así es como se vería el código actualizado:¡Espero que esto ayude! Si tienes más preguntas o inquietudes, no dudes en preguntar.