问题标签 [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.
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?
python - 使用 declarative_base 派生对象的 alembic create_table
我有一个炼金术 ORM 对象:
使用 alembic 创建表时,我执行以下操作:
问题:有没有办法使用 MyORM 类来创建表?像这样的东西:
python - 以编程方式获取 Alembic 数据库版本
我试图弄清楚如何使用 Alembic 获取我的数据库版本。我已经将数据库设置为使用 alembic 并成功地对其进行了升级和降级。我现在想从我自己的 python 脚本中获取这个版本。
我试图为此创建一个函数
该函数返回一个NoSectionError: No section: 'formatters'
然后我去我的 alembic.ini 文件检查它是否有一个格式化程序区域。这是我的 alembic.ini 文件:
有人知道我在做什么错吗?谢谢
编辑:
这是我尝试使用 MigrationContext 解决问题:
它连接但不返回。使用 sqlite 浏览器我可以看到数据库中的版本没有设置为无。
python - Alembic --autogenerate 尝试重新创建每个表
我正在尝试第一次针对预先存在的数据库自动生成 alembic 修订,但是当我运行以下命令时
它会生成一个迁移,尝试在我的数据库中创建每个表和索引。与此类似:
然后,如果我尝试运行迁移它会失败,因为对象已经存在:
所以在我看来,alembic 认为我的数据库不包含任何表,但它确实包含。
任何想法为什么会发生这种情况?
python - 如何在 Alembic 升级脚本中执行插入和更新?
我需要在 Alembic 升级期间更改数据。
我目前在第一版中有一个“玩家”表:
我想介绍一个“团队”表。我创建了第二个修订版:
我希望第二次迁移也添加以下数据:
填充团队表:
/li>根据players.team名称更新players.team_id:
/li>
如何在升级脚本中执行插入和更新?
python - 从应用程序代码内部使用 Alembic API
我使用 SQLite 作为基于 PySide 的桌面应用程序的应用程序文件格式(请参阅此处了解为什么要这样做)。也就是说,当用户使用我的应用程序时,他们的数据会保存在他们机器上的单个数据库文件中。我正在使用 SQLAlchemy ORM 与数据库进行通信。
当我发布应用程序的新版本时,我可能会修改数据库模式。我不希望用户每次更改架构时都必须丢弃他们的数据,因此我需要将他们的数据库迁移到最新格式。此外,我创建了很多临时数据库来保存数据的子集以供某些外部进程使用。我想用 alembic 创建这些数据库,以便用正确的版本标记它们。
我有几个问题:
有没有办法从我的 Python 代码中调用 alembic?我认为必须使用
Popen
纯 Python 模块很奇怪,但文档只使用命令行中的 alembic。主要是,我需要将数据库位置更改为用户数据库所在的位置。如果这不可能,我可以在不编辑 .ini 文件的情况下从命令行指定新的数据库位置吗?这将使调用 alembic
Popen
没什么大不了的。我看到 alembic 将其版本信息保存在一个名为 的简单表下
alembic_version
,其中一列称为version_num
,单行指定版本。我可以在我的架构中添加一个alembic_version
表并在创建新数据库时用最新版本填充它,这样就没有开销了吗?这还是个好主意吗?我应该只使用 alembic 创建所有数据库吗?
我在项目目录中用于开发的单个数据库非常适合使用 alembic。我想使用 alembic 在任意位置方便地迁移和创建数据库,最好是通过某种 Python API,而不是命令行。这个应用程序也被 cx_Freeze 冻结,以防万一。
谢谢!
python - Flask & SqlAlchemy - alembic session.add_all() 导致 AttributeError: 'bool' object has no attribute 'clear' 错误
我正在尝试插入一些数据作为部署的一部分。我创建了以下 Alembic 修订脚本
并且升级头导致 AttributeError: 'bool' object has no attribute 'clear' 错误。有什么线索吗?
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 的电子邮件地址以及之后的所有内容?
python - 是什么导致了这个 CircularDependencyError 以及它是如何修复的?
当我尝试迁移我的数据库时,我得到一个CircularDependencyError
. 我在Core Exceptions文档中找到了一些关于此的信息并尝试添加post_update=True
,但它并没有解决问题。我可以看到这是Branch和Card之间相互关系的问题。我该如何解决这个错误?
这些是我的模型:
这是我在使用这些模型时遇到的异常:
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 强制执行双精度列?