首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在事务中包装create和sqlalchemy-migrate alter语句

如何在事务中包装create和sqlalchemy-migrate alter语句
EN

Stack Overflow用户
提问于 2011-09-27 17:14:11
回答 1查看 1.5K关注 0票数 1

我正在尝试使用sqlalchemy迁移和sqlalchemy- table.create table.rename方法以及一些insert into select语句对数据库进行一些数据库模式更改。我想把所有这些都包装在一个事务中。我想不出该怎么做。这是我尝试过的:

代码语言:javascript
复制
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()

但是它的错误是:

代码语言:javascript
复制
AttributeError: 'RootTransaction' object has no attribute '_run_visitor'

(我尝试过使用sqlalchemy-migrate column.alter(column.alter=‘newname’),但这是错误的,并且在事务中不起作用,因此使我的数据库处于损坏状态。我还需要重命名多个列,因此我决定使用自己的代码。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-27 18:08:35

啊-我只需要使用在其上创建事务的连接。

代码语言:javascript
复制
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()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7566738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档