alo*_*ser 15 python sqlalchemy alembic
我想将 alembic 添加到现有的 sqlalchemy 使用的项目中,并带有一个有效的生产数据库。我找不到进行“零”迁移的标准方法是什么 == 将数据库设置为现在的迁移(对于设置环境的新开发人员)
目前我已经将 import 声明性基类和使用它的所有模型添加到 env.py ,但第一次alembic -c alembic.dev.ini revision --autogenerate
确实创建了现有表。
我需要“伪造”现有安装的迁移 - 使用代码。对于 django ORM,我知道如何进行这项工作,但我找不到使用 sqlalchemy/alembic 执行此操作的正确方法
mic*_*ard 24
alembic revision --autogenerate
检查连接的数据库和所述目标的状态的状态metadata
,然后创建带来的迁移database
符合metadata
。
如果您要引入alembic/sqlalchemy
现有数据库,并且您想要一个迁移文件,该文件给定一个空的、全新的数据库将重现当前状态 - 请按照以下步骤操作。
1) 确保您metadata
真正符合您当前的database
. 运行alembic revision --autogenerate
会创建零操作的迁移。
2)创建一个新的temp_db
即是空的,你的观点sqlalchemy.url
在alembic.ini
这个新temp_db.
3)运行alembic revision --autogenerate
。这将创建您想要的批量迁移,带来与当前数据库一致的新数据库。
4) 删除temp_db
并重新指向sqlalchemy.url
您现有的数据库。
5)运行alembic stamp head
。这告诉 sqlalchemy 当前的迁移代表了数据库的状态——所以下次你运行alembic upgrade head
它时将从这次迁移开始。
只需alembic upgrade head
针对空数据库运行即可。这会将所有迁移(在您的情况下,初始迁移,因为它是唯一的)应用到数据库。
如果您想从代码而不是从 shell 执行此操作,可以通过以下方式执行此操作:
from alembic.config import Config
from alembic import command
alembic_cfg = Config("/path/to/yourapp/alembic.ini")
command.upgrade(alembic_cfg, "head")
Run Code Online (Sandbox Code Playgroud)
一种方法是针对数据库运行此 SQL:
CREATE TABLE IF NOT EXISTS alembic_version (
version_num VARCHAR(32) NOT NULL
);
INSERT INTO alembic_version (version_num) VALUES ('your initial migration version');
Run Code Online (Sandbox Code Playgroud)
第一条语句创建 alembic 用来跟踪数据库/迁移状态的表。第二个语句基本上告诉 alembic 您的数据库状态对应于您初始迁移的版本,或者换句话说,伪造迁移。
Alembic 有一个stamp
命令,它基本上做同样的事情。它可以从 shell as 调用,也可以alembic stamp head
从代码(取自食谱)中调用:
from alembic.config import Config
from alembic import command
alembic_cfg = Config("/path/to/yourapp/alembic.ini")
command.stamp(alembic_cfg, "head")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6392 次 |
最近记录: |