Alembic / Flask迁移无法识别数据库结构

拉威科

我有一个基于Flask的应用程序,并且正在尝试使迁移能够管理数据库结构更改。在我开始使用Alembic和flask-migrate之前,我的数据库不是空的,并且包含表和记录。

首先,我尝试使用alembic独立服务器,只是pip install alembic,然后配置所有内容并使用autogenerate生成差异。一切正常,但输出与我期望的不完全相同:

INFO  [alembic.autogenerate.compare] Detected removed table u'user'
  Generating /Users/me/Documents/Project/app/migrations/versions/3de1151ce5de_.py ... done

因此,表用户实际上存在于我的数据库中(我认为它是postgresql中的保留表),而且我从未删除过它。另外,我还有一堆其他的表格,这些表格似乎对alembic不可见。起初我以为我无法正确配置Alembic,所以我重新开始了,并决定尝试Miguel Grinberg的这个不错的烧瓶扩展设置起来很容易,但是结果是完全相同的消息。

有什么想法我做错了吗?

编辑:我决定添加一些有关如何编辑原始alembic env.py的重要信息:

....
import sys,os sys.path.append(os.getcwd())
import app from app import db
target_metadata = db.metadata

....

def run_migrations_online():
    """Run migrations in 'online' mode.

    In this scenario we need to create an Engine
    and associate a connection with the context.

    """
    # all the models need to be imported so they are visible when migration runs
    from app.models import Model1, Model2, Model3, Model4, Model5

...

这些更改对于使Alembic在开始任何迁移之前查看我的声明性基础和模型是必需的。删除独立方法之后,我只是按照flask-migrate教程进行操作,没有接触那里的任何文件。

编辑:好的,所以我们已经解释了删除的“用户”表。尽管如此,我的其他模型仍未出现在脚本中。我认为会发生什么情况是因为该应用程序是在创建迁移脚本之前启动的,所以sqlalechmy db.create_all()调用会创建表,这就是为什么alembic在colums vs模型中看不到任何差异的原因。也许我在错误的地方调用了create_all()

编辑:是的!就是这样,我感动db.create_all()以下manager.run() 它现在正确检测到的变化。感谢您提供的所有帮助!

米格尔

您的数据库具有一个user表,该表未在任何SQLAlchemy模型中表示。正确的?

然后,Alembic将假定您已删除该表,因为所有自动迁移脚本所做的工作都是显示您的应用程序中定义的模型与实际数据库之间的差异。Alembic无法知道数据库中是否有一个表被视为不受迁移脚本的影响。

在任何情况下,自动迁移功能都很好,但是不应认为它是完全“自动”的。使用它们之前,您始终必须检查生成的脚本并修复所有错误或不准确性。

前进的方法是编辑迁移脚本以更正此问题。只是拿走那个删除表。迁移脚本是手工编辑的,不要害怕这样做。

不幸的问题是,每次您发布新迁移时,表删除都会再次显示。我认为Alembic没有办法提供例外。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Alembic的不可逆迁移

来自分类Dev

烧瓶的Alembic迁移

来自分类Dev

Alembic-SQLAlchemy初始迁移

来自分类Dev

使用Alembic进行迁移时,本地和Heroku数据库不同步

来自分类Dev

使用Alembic迁移时本地和Heroku数据库不同步

来自分类Dev

Heroku上的Alembic / Flask迁移迁移运行但不创建表

来自分类Dev

在Google App Engine上运行Alembic迁移

来自分类Dev

Alembic自动生成迁移,无需检查约束

来自分类Dev

在Alembic迁移上插入Unicode值

来自分类Dev

Alembic迁移:如何删除多态身份

来自分类Dev

在Alembic迁移中插入Unicode值

来自分类Dev

验证管道构建中的 Alembic 迁移

来自分类Dev

在长颈瓶迁移或Alembic迁移中创建种子数据

来自分类Dev

为什么Alembic无法自动生成?

来自分类Dev

Alembic无法删除server_default

来自分类Dev

Alembic自动生成空的Flask-SQLAlchemy迁移

来自分类Dev

如何通过Alembic(从CSV文件)导入数据?

来自分类Dev

Alembic自动生成获取Flask-SQLAlchemy绑定的元数据

来自分类Dev

Alembic会在乎其迁移文件称为什么吗?

来自分类Dev

Alembic-SQLAlchemy无法检测到现有表

来自分类Dev

创建过程无法识别数据库

来自分类Dev

使用Flask-SQLAlchemy在Alembic迁移自动生成中未检测到任何更改

来自分类Dev

当我希望通过升级内的Session对象更改数据时,如何测试alembic迁移?

来自分类Dev

使用Alembic创建数据库表和在SQLAlchemy中定义模型之间有什么区别?

来自分类Dev

有没有一种简单的方法可以告诉Alembic迁移到特定版本?

来自分类Dev

PostgreSQL模式的Alembic迁移问题和无效的一对多关系

来自分类Dev

Sqlite缺少ALTER支持,因此Alembic迁移失败。解决方案?

来自分类Dev

如何在Alembic迁移中为每一行设置唯一值

来自分类Dev

GeoAlchemy2的Alembic迁移引发NameError:名称'geoalchemy2'未定义

Related 相关文章

  1. 1

    Alembic的不可逆迁移

  2. 2

    烧瓶的Alembic迁移

  3. 3

    Alembic-SQLAlchemy初始迁移

  4. 4

    使用Alembic进行迁移时,本地和Heroku数据库不同步

  5. 5

    使用Alembic迁移时本地和Heroku数据库不同步

  6. 6

    Heroku上的Alembic / Flask迁移迁移运行但不创建表

  7. 7

    在Google App Engine上运行Alembic迁移

  8. 8

    Alembic自动生成迁移,无需检查约束

  9. 9

    在Alembic迁移上插入Unicode值

  10. 10

    Alembic迁移:如何删除多态身份

  11. 11

    在Alembic迁移中插入Unicode值

  12. 12

    验证管道构建中的 Alembic 迁移

  13. 13

    在长颈瓶迁移或Alembic迁移中创建种子数据

  14. 14

    为什么Alembic无法自动生成?

  15. 15

    Alembic无法删除server_default

  16. 16

    Alembic自动生成空的Flask-SQLAlchemy迁移

  17. 17

    如何通过Alembic(从CSV文件)导入数据?

  18. 18

    Alembic自动生成获取Flask-SQLAlchemy绑定的元数据

  19. 19

    Alembic会在乎其迁移文件称为什么吗?

  20. 20

    Alembic-SQLAlchemy无法检测到现有表

  21. 21

    创建过程无法识别数据库

  22. 22

    使用Flask-SQLAlchemy在Alembic迁移自动生成中未检测到任何更改

  23. 23

    当我希望通过升级内的Session对象更改数据时,如何测试alembic迁移?

  24. 24

    使用Alembic创建数据库表和在SQLAlchemy中定义模型之间有什么区别?

  25. 25

    有没有一种简单的方法可以告诉Alembic迁移到特定版本?

  26. 26

    PostgreSQL模式的Alembic迁移问题和无效的一对多关系

  27. 27

    Sqlite缺少ALTER支持,因此Alembic迁移失败。解决方案?

  28. 28

    如何在Alembic迁移中为每一行设置唯一值

  29. 29

    GeoAlchemy2的Alembic迁移引发NameError:名称'geoalchemy2'未定义

热门标签

归档