Как обернуть создание и sqlalchemy-переносить изменение статистики в транзакции - PullRequest
1 голос
/ 27 сентября 2011

Я пытаюсь внести некоторые изменения в схему базы данных в моей базе данных, используя методы sqlalchemy table.create и sqlalchemy-migrate table.rename, а также некоторые вставки в выбранные оценки.Я хочу обернуть все это в транзакцию.Я не могу понять, как это сделать.Это то, что я пробовал:

engine = sqlalchemy.engine_from_config(conf.local_conf, 'sqlalchemy.')
trans = engine.connect().begin()
try:
    old_metatadata.tables['address'].rename('address_migrate_tmp', connection=trans)
    new_metatadata.tables['address'].create(connection=trans)
except:
    trans.rollback()
    raise
else:
    trans.commit()

Но это ошибки с:

AttributeError: 'RootTransaction' object has no attribute '_run_visitor'

(я пытался использовать sqlalchemy-migrate column.alter (name = 'newname'), но это ошибки,и не работает в транзакции, и поэтому оставляет мою базу данных в нерабочем состоянии. Мне также нужно переименовать несколько столбцов, и поэтому я решил свернуть свой собственный код.)

1 Ответ

2 голосов
/ 27 сентября 2011

А, мне нужно просто использовать соединение, на котором была создана транзакция.

engine = sqlalchemy.engine_from_config(conf.local_conf, 'sqlalchemy.')
conn = engine.connect()
trans = conn.begin()
try:
    old_metatadata.tables['address'].rename('address_migrate_tmp', connection=conn)
    new_metatadata.tables['address'].create(bind=conn)
except:
    trans.rollback()
    raise
else:
    trans.commit()
...