#python #postgresql #character-encoding #psycopg2
#python #postgresql #кодировка символов #psycopg2
Вопрос:
У меня есть таблица в схеме.
my_schema.my_table
В той же схеме у меня также есть таблица с тем же именем, но со знаками кавычек
my_schema."my_table"
Как я могу удалить my_schema."my_table"
с помощью psycopg2?
(без риска падения my_schema.my_table
)
Я пробовал:
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();
Но я получаю
SyntaxError: zero-length delimited identifier at or near """"
LINE 1: drop TABLE my_schema.""my_table"";
Я также пытался:
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();
Но тогда я получаю:
UndefinedTable: table "my_schema.""my_table""" does not exist
Комментарии:
1.
my_table
совпадает с «my_table», если они находятся в одной схеме. Вpsql
dodt my_schema.*
для подтверждения.2.Что касается вашей ошибки в
sql.SQL
разделе sqlclass psycopg2.sql.Identifier
иsql.Identifier("schema", "table")
.3. по какой-то причине это были разные таблицы. ваш второй комментарий решен, не могли бы вы дать на него ответ?
4. Так
my_schema.my_table
все еще существует? Если это так, в имени должен быть какой-то скрытый символ. Что произойдет, если вы это сделаетеselect * from pg_class where relname = 'my_table';
?
Ответ №1:
Чтобы избежать двойных кавычек в имени объекта, удвойте двойные кавычки:
DROP TABLE my_schema."""my_table""";