rollback.py :
def write_to_db(dataset_id):
try:
initialize_datamodels()
EpdUmpPushRollback = datamodels.relational_tables.EpdUmpPushRollback
with session_scope() as session:
epdumppushrollback_obj = EpdUmpPushRollback()
epdumppushrollback_obj.dataset_id = dataset_id
epdumppushrollback_obj.record_id = ''
epdumppushrollback_obj.operator_name = 'vis'
epdumppushrollback_obj.activation_flag = 'active'
epdumppushrollback_obj.record_creation_time = now()
epdumppushrollback_obj.start_time = now()
session.add(epdumppushrollback_obj)
session.flush()
except Exception as e:
#err = "Error in updating the table epd_ump_push_rollback "
#_log.exception(err)
_log.exception("Error in updating the table {}".format(e))
table.py :
"""epd_ump_push_rollback_table
Revision ID: 4e4d99a8e544
Revises: c010f4d4b319
Create Date: 2018-12-19 18:04:30.271380
"""
from alembic import op
from sqlalchemy import Column, String, INTEGER, VARCHAR, NVARCHAR, TIMESTAMP, \
Enum, ForeignKey, Sequence, MetaData
# revision identifiers, used by Alembic.
revision = '4e4d99a8e544'
down_revision = '2396e1b7de5c'
branch_labels = None
depends_on = None
meta = MetaData()
seq_obj = Sequence('record_id_seq', metadata=meta)
def upgrade():
activation_flag_state = Enum('active', 'inactive', name="activation_flag_state")
op.create_table('epd_ump_push_rollback',
Column('dataset_id', String, ForeignKey('epd_ip_dataset.dataset_id'),
primary_key=True),
Column('record_id', INTEGER, seq_obj, server_default=seq_obj.next_value(),
primary_key=True),
Column('operator_name', String, nullable=False),
Column('activation_flag', activation_flag_state, nullable=False),
Column('record_creation_time', TIMESTAMP),
Column('start_time', TIMESTAMP),
Column('end_time', TIMESTAMP))
def downgrade():
op.drop_table('epd_ump_push_rollback')
op.execute('DROP type activation_flag_state')
Объяснение:
В файле rollback.py
я пишу в дб.Я устанавливаю сеанс с db(postgresql)
, используя with session_scope() as session:
.Я создаю объект таблицы EpdUmpPushRollback
и устанавливаю эти значения соответствующим образом.Столбец record_id
должен быть сгенерирован как последовательность, которую я определяю в table.py
, и я использую alembic для обновления моей схемы до новой, которая будет иметь таблицу EpdUmpPushRollback
.
У меня сейчас два вопроса.
- Для столбца, в котором мы определили последовательность, обязательно ли добавлять с помощью
pdumppushrollback_obj.record_id = ''
или оно добавляется автоматически? - Каким должно быть имя последовательности, когда я пытаюсь добавить какую-либо запись в таблицу, она выдает эту ошибку.
Ошибка: sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) «record_id_seq» не является последовательностью), now (),% (end_time) s) RETURNING epd_ump_push_rollback.record_id '] [parameters: {' dataset_id ':' 20181221_1200_mno ',' operator_name ':' vis ',' активации_flag ':' active ',' end_time ':Нет}]