Jon*_*Jon 11 python database sqlalchemy sqlalchemy-migrate python-elixir
我创建了一个python应用程序,它使用elixir/sqlalchemy来存储数据.软件的第二个版本要求更新在先前版本中创建的任何文件,以便添加/删除表和列.
我的问题是:我怎样才能做到这一点?我知道sqlalchemy-migrate,但我必须说我发现它令人困惑.它没有提到现有数据会发生什么.此外,sqlite 减少了ALTER TABLE支持,因此如果我尝试删除列,将会迁移什么?有没有其他方法可以使用迁移?
你所谈论的是一个众所周知且非常复杂的问题.它被称为数据库迁移.每个好的项目都有一些策略,描述应该如何应用数据库模式和数据突变以从一个产品版本推进到另一个产品版本.
许多框架(如Django或Ruby on Rails)都具有内置的迁移系统或作为插件提供.SQLAlchemy的案例很少:
/tmp/migrate.sql,写下ALTER/DROP/CREATE语句,交叉指针并将其应用到SQLite基础.这通常是一个坏主意,因为它容易出错,但选择取决于你.缺少全功能ALTER TABLE语句可以通过创建具有临时名称的所需属性的新列,将原始列中的所有数据复制到其中,删除原始列以及将新列重命名为原始名称来解决.可以在表级使用相同的技术.您已经询问过如果您尝试删除列,SQLAlchemy-migrate将执行的操作.好吧,它会删除一列,因此删除其中的任何数据.表中的其他列将保持不变.
sqlalchemy-migrate的最新替代品是alembic,由SQLAlchemy本人的作者编写.虽然后者("同一作者")看起来像一个强有力的论点,但缺点是它不支持SQLite的表更改,即它没有SQLite缺少ALTER支持的内置变通方法.(有人可能认为这超出了范围,可以通过专门的python包或SQLite扩展来解决.)
| 归档时间: |
|
| 查看次数: |
4429 次 |
| 最近记录: |