Как я могу вставлять комментарии столбцов в PostgreSQL через Python?

avatar
Saaru Lindestøkke
13 февраля 2020 в 14:58
432
1
0

Проблема

Я хочу добавить комментарий к ряду столбцов из 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.';

Когда я проверяю комментарии столбца с запросом из этого ответа, на самом деле комментарии не устанавливаются.

Если я скопирую и вставлю то, что распечатано, в клиент базы данных и запущу его там, комментарий столбца обновится, как и должно быть.

Как я могу обновить комментарий к столбцу с помощью цикла в Python?

Источник
Ilja Everilä
14 февраля 2020 в 05:30
1

Автоматическая фиксация SQLAlchemy не распознает COMMENT ON ... как операцию изменения данных: coderhelper.com/questions/59792023/…

Ответы (1)

avatar
jjanes
13 февраля 2020 в 19:16
3

Вы не зафиксировали изменения, поэтому они автоматически откатываются. Один из способов сделать это:

con.execute(text(stmt).execution_options(autocommit=True))