问题标签 [alembic]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
466 浏览

python - flask-migrate wants to drop my indeces

I've got a Flask app with the following models:

I've run a migration to specify my indices and foreign key constraints:

However, any time I create another new migration Alembic seems to want to drop my indexes.

Is there a way to freeze Alembic's autogeneration at the current DB/Model schema?

0 投票
1 回答
2388 浏览

python - 使用 declarative_base 派生对象的 alembic create_table

我有一个炼金术 ORM 对象:

使用 alembic 创建表时,我执行以下操作:

问题:有没有办法使用 MyORM 类来创建表?像这样的东西:

0 投票
9 回答
9826 浏览

python - 以编程方式获取 Alembic 数据库版本

我试图弄清楚如何使用 Alembic 获取我的数据库版本。我已经将数据库设置为使用 alembic 并成功地对其进行了升级和降级。我现在想从我自己的 python 脚本中获取这个版本。

我试图为此创建一个函数

该函数返回一个NoSectionError: No section: 'formatters'

然后我去我的 alembic.ini 文件检查它是否有一个格式化程序区域。这是我的 alembic.ini 文件:

有人知道我在做什么错吗?谢谢

编辑:

这是我尝试使用 MigrationContext 解决问题:

它连接但不返回。使用 sqlite 浏览器我可以看到数据库中的版本没有设置为无。

0 投票
1 回答
3258 浏览

python - Alembic --autogenerate 尝试重新创建每个表

我正在尝试第一次针对预先存在的数据库自动生成 alembic 修订,但是当我运行以下命令时

它会生成一个迁移,尝试在我的数据库中创建每个表和索引。与此类似:

然后,如果我尝试运行迁移它会失败,因为对象已经存在:

所以在我看来,alembic 认为我的数据库不包含任何表,但它确实包含。

任何想法为什么会发生这种情况?

0 投票
3 回答
63815 浏览

python - 如何在 Alembic 升级脚本中执行插入和更新?

我需要在 Alembic 升级期间更改数据。

我目前在第一版中有一个“玩家”表:

我想介绍一个“团队”表。我创建了第二个修订版:

我希望第二次迁移也添加以下数据:

  1. 填充团队表:

    /li>
  2. 根据players.team名称更新players.team_id:

    /li>

如何在升级脚本中执行插入和更新?

0 投票
9 回答
25355 浏览

python - 从应用程序代码内部使用 Alembic API

我使用 SQLite 作为基于 PySide 的桌面应用程序的应用程序文件格式(请参阅此处了解为什么要这样做)。也就是说,当用户使用我的应用程序时,他们的数据会保存在他们机器上的单个数据库文件中。我正在使用 SQLAlchemy ORM 与数据库进行通信。

当我发布应用程序的新版本时,我可能会修改数据库模式。我不希望用户每次更改架构时都必须丢弃他们的数据,因此我需要将他们的数据库迁移到最新格式。此外,我创建了很多临时数据库来保存数据的子集以供某些外部进程使用。我想用 alembic 创建这些数据库,以便用正确的版本标记它们。

我有几个问题:

  • 有没有办法从我的 Python 代码中调用 alembic?我认为必须使用Popen纯 Python 模块很奇怪,但文档只使用命令行中的 alembic。主要是,我需要将数据库位置更改为用户数据库所在的位置。

  • 如果这不可能,我可以在不编辑 .ini 文件的情况下从命令行指定新的数据库位置吗?这将使调用 alembicPopen没什么大不了的。

  • 我看到 alembic 将其版本信息保存在一个名为 的简单表下alembic_version,其中一列称为version_num,单行指定版本。我可以在我的架构中添加一个alembic_version表并在创建新数据库时用最新版本填充它,这样就没有开销了吗?这还是个好主意吗?我应该只使用 alembic 创建所有数据库吗?

我在项目目录中用于开发的单个数据库非常适合使用 alembic。我想使用 alembic 在任意位置方便地迁移和创建数据库,最好是通过某种 Python API,而不是命令行。这个应用程序也被 cx_Freeze 冻结,以防万一。

谢谢!

0 投票
1 回答
1004 浏览

python - Flask & SqlAlchemy - alembic session.add_all() 导致 AttributeError: 'bool' object has no attribute 'clear' 错误

我正在尝试插入一些数据作为部署的一部分。我创建了以下 Alembic 修订脚本

并且升级头导致 AttributeError: 'bool' object has no attribute 'clear' 错误。有什么线索吗?

0 投票
2 回答
7641 浏览

database - 使用 alembic 升级表时设置列的值

我正在使用 PostgreSQL 和 Alembic 进行迁移。当我向我的用户表添加新列时,Alembic 使用以下脚本生成了迁移:

我真正想做的是在升级生产版本时自动生成用户名的值。换句话说,我的生产版本有很多用户,如果我在上面运行上面的升级,会出现一个错误,指出用户名不能为 NULL,所以我必须删除所有用户,升级用户表和再次添加用户后,这很痛苦。因此,我想改变上面的脚本:

正如上面代码中所述,我想执行一个 SQL 代码来检查电子邮件地址,如 test@example.com,并在“@”符号(在本例中为“@example.com”)之后抛出所有内容并设置值之后的用户名(在本例中为“test”)使 nullable=false。

我怎样才能做到这一点?什么必须是脚本而不是username = <email address with no '@' and everything comes after '@' sign should be removed>和设置nullable=false

或者,如果有任何其他方法可以将username默认值设置为不带@sing 的电子邮件地址以及之后的所有内容?

0 投票
0 回答
218 浏览

python - 是什么导致了这个 CircularDependencyError 以及它是如何修复的?

当我尝试迁移我的数据库时,我得到一个CircularDependencyError. 我在Core Exceptions文档中找到了一些关于此的信息并尝试添加post_update=True,但它并没有解决问题。我可以看到这是Branch和Card之间相互关系的问题。我该如何解决这个错误?

这些是我的模型:

这是我在使用这些模型时遇到的异常:

0 投票
1 回答
5842 浏览

python - 使用 Alembic 中的 SqlAlchemy 创建双精度列

我需要在我的 MYSQL 数据库中使用 DOUBLE 列。我已经阅读了文档,其中建议我使用精度为 64 的浮点数。但是,这似乎不起作用。我最终得到一个常规的浮点列,并且不存在所需的精度。

我也试过:

但是,在迁移时,Flask-Migrate 似乎无法区分上一列和新列之间的区别,并生成一个空迁移。

我读到这个:使用 Flask-SQLAlchemy 和https://github.com/miguelgrinberg/Flask-Migrate/issues/24在迁移的 Alembic 自动生成中没有检测到任何变化

并尝试在 alembic 设置中设置 compare_type=True ,但 Float 和 Double 类型之间仍然没有区别。

我知道我可以手动切换数据库中的列,但是如何使用 sqlalchemy 强制执行双精度列?