Проблема
Я хочу добавить комментарий к ряду столбцов из Python в базе данных PostGreSQL. Если я запускаю утверждение, что мой скрипт Python создает в клиенте базы данных вручную, все работает как надо. Если я позволю Python запустить оператор через механизм sqlalchemy, ничего не будет обновлено.
Подробности
У меня есть словарь в Python формы { 'column name': 'column comment with some text'}
.
Я хочу добавить эти комментарии к существующей таблице в базе данных PostGres.
Вручную я бы запустил следующую команду в PostGres:
comment on column schema.table."column name" is 'column comment with some text'
Теперь в Python Я хочу запустить то же самое, но затем цикл по словарю. Это код, который я использую:
from sqlalchemy import create_engine, text
db = create_engine(f"postgresql://PGUSER:PGPASSWORD@PGHOST/PGDATABASE")
coldict = {'col1': 'col1 contains this data, etc... some more comments', 'col2': 'col2 shows something.'}
with db.connect() as con:
for key in coldict:
colname = key
# Convert a single quote to two single quotes as that is what SQL likes.
colcomm = coldict[key].translate(str.maketrans({"'": "''"}))
stmt = f"comment on column schema.table.\"{colname}\" is '{colcomm}';"
# print the statement that will be run for debugging
print(stmt)
# execute statement in database
con.execute(text(stmt))
Это распечатывает:
comment on column schema.table."col1" is 'col1 contains this data, etc... some more comments';
comment on column schema.table."col2" is 'col2 shows something.';
Когда я проверяю комментарии столбца с запросом от этот ответ комментарии отсутствуют на самом деле установлено.
Если я скопирую и вставлю то, что распечатано, в клиент базы данных и запусту его там, комментарий к столбцу будет обновлен, как и должно быть.
Как я могу обновить комментарий к столбцу с помощью al oop in Python?