我必须能够管理基于结构的数据库的迁移。在开始使用alembic和flask migrate之前,我的数据库不是空的,并且包含表和记录。在
首先,我尝试独立使用alembic,只需pip安装alembic,然后配置所有内容并使用autogenerate生成diff。所有操作都很好,但输出的结果并不是我所期望的:
INFO [alembic.autogenerate.compare] Detected removed table u'user'
Generating /Users/me/Documents/Project/app/migrations/versions/3de1151ce5de_.py ... done
所以表user实际上存在于我的数据库中(我认为它是postgresql中的一个保留表),而且我从未删除过它。我还得看不见一堆桌子。一开始我认为我未能正确配置alembic,所以我重新开始并决定尝试this nice flask extension by Miguel Grinberg。这很容易设置,但结果是完全相同的消息。在
你知道我做错什么了吗?在
编辑:我决定添加一些关于如何编辑我的原始alembic的重要信息环境保护以下内容:
^{pr2}$在任何迁移开始之前,alembic必须看到我的声明性基础和模型。在放弃了独立的方法之后,我只遵循了flask迁移教程,没有接触任何文件。在
编辑:好的,我们已经解释了删除的“user”表。不过,我的其他模型没有出现在脚本中。我认为由于应用程序是在创建迁移脚本之前启动的,所以sqlalechmy全部创建数据库()call创建表,这就是为什么alembic看不到colums与models之间有任何区别。也许我在错误的地方调用了create\u all()?在
编辑:是!就这样,我搬家了全部创建数据库()低于经理.run()并且它现在可以正确检测更改。谢谢你的帮助!在
您的数据库有一个
user
表,该表在任何SQLAlchemy模型中都没有表示。对的?在然后,Alembic将假定您已经删除了表,因为自动迁移脚本所做的只是显示应用程序中定义的模型与实际数据库之间的差异。Alembic无法知道您的数据库中有一个表被视为不受迁移脚本的影响。在
在任何情况下,自动迁移特性都是很好的,但是它不应该是完全“自动”的。在使用之前,您必须检查生成的脚本并修复任何错误或不准确之处。在
前进的方法是编辑迁移脚本以更正此问题。把那个移走的桌子拿走。迁移脚本是要手工编辑的,不要害怕这样做。在
不幸的问题是,每次发布新迁移时,表remove将再次出现。我不认为Alembic有办法提供例外。在
相关问题 更多 >
编程相关推荐