Почему команда ALTER не работает с sqlalchemy, но работает в pgAdmin? - PullRequest
0 голосов
/ 23 марта 2020

Я определенно не эксперт с SQL или sqlalchemy; Я использовал их совсем немного, только делая основные действия CRUD. Но теперь я использую sqlalchemy для сброса последовательности индексов для ряда таблиц:

table_sequences = {
    "pump_calendar_event":'pump_calendar_event_index_seq',
    "pump_calendar_rule":'pump_calendar_rule_index_seq',

}

for table,seq_name in table_sequences.items():
    max_index_query = f'SELECT MAX(index)+1 from public."{table}";'
    max_index_results = connection.execute(max_index_query).fetchall()[0][0]
    if max_index_results is not None:
        update_sequence_query = f'ALTER SEQUENCE "{seq_name}" RESTART WITH {max_index_results};'
        connection.execute(update_sequence_query)
        print(update_sequence_query)

max_index_results выполняется правильно и возвращает самый высокий индекс +1. Но connection.execute(update_sequence_query) не выполняется правильно. Если это терпит неудачу тогда, это терпит неудачу тихо, потому что я не получаю ошибку. Я знаю, что сгенерированный мной запрос правильный, потому что я просто копирую и вставляю его в инструмент запросов в pgAdmin, и он сбрасывает последовательность. Вкратце: он работает, когда я копирую и вставляю его вручную, но не когда я запускаю его с connection.execute(update_sequence_query).

...