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.

Eliminar una tabla PostgreSQL con comillas en el nombre utilizando psycopg2

Tengo una tabla en un esquema.

my_schema.my_table

En el mismo esquema, también tengo una tabla con el mismo nombre pero con comillas.

my_schema."my_table"

¿Cómo puedo eliminar my_schema."my_table" usando psycopg2?
(sin riesgo de eliminar my_schema.my_table)

He intentado:

postgresConnection = psycopg2.connect(...)
from psycopg2 import sql 

cursor = postgresConnection.cursor()
name_Table = 'my_schema."my_table"'
cursor = postgresConnection.cursor()
dropTableStmt = "drop TABLE %s;"%name_Table;
cursor.execute(dropTableStmt)
postgresConnection.commit()
cursor.close();

Pero obtengo:

SyntaxError: identificador delimitado de longitud cero en o cerca de """"
LINE 1: drop TABLE my_schema.""my_table"";

También he intentado:

from psycopg2 import sql 

cursor = postgresConnection.cursor()
name_Table = 'my_schema.""my_table""'
cur = postgresConnection.cursor()
cur.execute(sql.SQL("DROP table {table}").format(table=sql.Identifier(name_Table)))
postgresConnection.commit()
cursor.close();

Pero luego obtengo:

UndefinedTable: la tabla "my_schema.""my_table""" no existe
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para eliminar my_schema.""my_table"" sin arriesgarse a eliminar my_schema.my_table, es necesario usar comillas dobles al referirse a la tabla con las comillas de citas. Aquí tienes un ejemplo de cómo hacerlo:

    from psycopg2 import sql
    
    postgresConnection = psycopg2.connect(...)
    cursor = postgresConnection.cursor()
    quoted_name = 'my_schema."my_table"'
    cursor.execute(sql.SQL("DROP TABLE IF EXISTS {table} CASCADE").format(table=sql.Identifier(quoted_name)))
    postgresConnection.commit()
    cursor.close()
    

    En el código anterior, usamos el método sql.Identifier para citar correctamente el nombre de la tabla con comillas dobles. Luego, usamos la cláusula IF EXISTS en la declaración DROP TABLE para solo eliminar la tabla si existe en el esquema. La cláusula CASCADE se utiliza para asegurar que cualquier dependencia de la tabla también sea eliminada.

    Al utilizar estas cláusulas y citar correctamente el nombre de la tabla, puedes eliminar my_schema.""my_table"" sin arriesgarte a eliminar my_schema.my_table.

Comments are closed.