问题标签 [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 回答
2195 浏览

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

我在 Postgres 中创建了一个数据库和模式。我有我的模型,当我python manager.py db migrate使用 Flask-Migrate 运行时,我收到以下错误。但是,该db init命令有效。

现在,当我将__tablename__和添加__table_args__ = {"schema": "name_of_schema"}到我的模型时,我得到以下两者的错误,db init并且db migrate

然而,我的人际关系看起来还不错。我见过很多例子,它们在没有 Flask-Migrate 的情况下在 SQLite 上正常工作。

我有如下三个表(删除大多数列):

关系是:

  • 应用到实例(一对多;一个应用多个实例)
  • 要部署的实例(一对多;一个实例多个部署)

当我删除所有关系并创建一个独立表时,我仍然收到第一个错误:sqlalchemy.exc.ProgrammingError: (ProgrammingError) no schema has been selected to create in. 有什么问题,我该如何解决?

0 投票
1 回答
1315 浏览

python - sqlalchemy 模式:没有唯一约束匹配引用表的给定键

我正在尝试使用结构相同但目的不同的 SQLAlchemy 模型创建 2 个表,Whitelist并且Blacklist它们也引用 a Magazine(未显示)。它们都指向一个 Campaign 实例(比如一个政治运动),而该实例又具有一个指向模型的 fkey Politician(也未显示)。

我正在想象Whitelist/Blacklist是 many:1Campaign因为可能有多个白/黑名单,但是在运行迁移时我得到sqlalchemy.exc.ProgrammingError: (ProgrammingError) there is no unique constraint matching given keys for referenced table "campaigns". 还需要有一个 M:1 from Campaignto Politician

有人可以解释为什么这会导致唯一约束错误,因为白名单和黑名单位于不同的表上?另外,我怎样才能使这个关系模式工作?

0 投票
0 回答
94 浏览

python - 包括 alembic 作为自定义安装程序脚本的一部分,以创建或升级数据库?

我正在向用户发送一个 python 脚本,它将安装我们的产品。作为安装的一部分,我还希望能够创建一组数据库表。

看来,alembic 非常适合这项工作。因为对于我们产品的每次升级,我都可以让 alembic 升级数据库。

为了让我们的用户真正简单,有没有办法:

  • 将 alembic 包含在我们的发行版中,而不强制最终用户运行 pip 来安装它?
  • 从 python 脚本调用 alembic,这样我们就可以在 Python 中做所有事情(无需创建 bat 或 sh 文件)?

这必须跨平台运行,因此任何依赖于平台的安装步骤(例如,像运行“make”)都是不可取的。

0 投票
1 回答
2358 浏览

python - alembic - 使用包资源作为 script_location 的示例

我正在尝试将 Alembic 迁移作为 python 包分发的一部分。由于将安装此发行版,因此 Alembic 脚本目录(包含迁移)最终将被复制到 python 包文件夹。在这种情况下,我如何告诉 Alembic 在哪里可以找到这个目录?

在 Alembic 文档中,它说migration可以在config.ini文件中指定目录作为包引用:

  • script_location - 这是 Alembic 环境的位置。它通常被指定为文件系统位置,相对的或绝对的。如果位置是相对路径,则将其解释为相对于当前目录。

(剪断)

为了支持将自身打包成 .egg 文件的应用程序,该值也可以指定为包资源,在这种情况下,resource_filename() 用于查找文件(0.2.2 中的新功能)。任何包含冒号的非绝对 URI 在这里都被解释为资源名称,而不是直接的文件名。

该文档没有提供更多信息或示例。

有没有人成功地实现了这一点?您究竟如何使您的migrationscripting_folder 成为“包资源”?那么你如何告诉 alembic 在哪里可以找到它呢?

0 投票
2 回答
2569 浏览

python - 如何使用 alembic 将 MySQL 表转换为 utf8 字符集?

我的数据库是 MySQL。我使用 SqlAlchemy ORM 来定义和访问它。我使用 Alembic 进行迁移。我有一个模型,它的字段过去只包含英文文本(Ascii/latin-1)。现在,该字段需要包含 Unicode 文本。为了将我的模型转换为支持 MySQL 的 Unicode,我需要添加以下类级别属性:mysql_character_set = 'utf8'

到目前为止,一切都很好。我想将此属性添加为 Alembic 迁移脚本的一部分。我通常使用 Alembic 出色的自动生成命令:

问题是这个命令没有捕捉到每个模型的变化,特别是没有添加mysql_character_set属性。

如何手动将此属性添加到 alembic 迁移脚本?

0 投票
1 回答
1185 浏览

python - Sqlalchemy(和alembic)没有多态联合的具体表继承

我是 SQLAlchmey 的新手,我正在尝试实现以下对象/数据库表结构(也使用 alembic):

我希望所有其他配置类都从中继承预定义的列:

BaseConfig表不是真正的表,它只是一个保存公共列的类除此之外 - A 和 B 之间没有任何关系,也不需要共享 pk 等。似乎使用“ polymorphic_union ”在这里也无关紧要。

通过尝试运行 alembic autogenerate 我得到了 BaseConfig 没有表映射类的错误 - 这是真的,我真的没有理由将“多态联合”选项添加到 BaseConfig,因为这个类是通用的. 有什么建议么?(在 Django with south 中,这是开箱即用的,但在这里似乎不容易支持这种行为)。

谢谢,李

0 投票
1 回答
4554 浏览

python - Alembic - sqlalchemy 初始迁移

我在创建初始迁移时遇到问题,该迁移将自动包含我在 models.py 中使用共享基础(declarative_base)定义的表。

当我输入命令时:

alembic 创建一个空文件。

我的配置或方法有什么问题?

项目.base.py:

环境.py:

样品型号:

编辑:

我发现那Base.metadata.sorted_tables是空的。

0 投票
2 回答
12159 浏览

python - Alembic - sqlalchemy 未检测到现有表

我问了一个关于如何使用检测表的问题( Alembic - sqlalchemy initial migration )

为了

在我将模型导入 env.py 文件后,它似乎工作正常,但它没有检测到实际存在的表,因此它创建了一个包含所有表的迁移文件,例如:

我试过了:

但在运行该命令并运行 autogenerate 命令后,系统会再次生成所有模型。

我该如何避免这个问题?

编辑:

ENV.py:

我删除了数据库并进行了迁移

0 投票
1 回答
2040 浏览

python - 在迁移中保留数据

使用此设置:

如果我有一个数据库,其中一些表填充了随机数据。据我所知,将使用 Alembic的Flask-Migrate不会保留数据,只会保持模型和数据库同步。

但是使用 Alembic 或只是删除 > 创建所有表有什么区别?

就像是:


第二个问题:

当模型发生变化时,数据会发生什么变化?数据会丢失吗?或者 Alembic 可以保留以前填充的数据?

好吧,我的想法只是用一些数据填充数据库,然后在模型更改时避免任何数据丢失。Alembic是解决方案吗?

或者我需要从 .sql 文件导入数据,例如,当我更改模型和数据库时?

0 投票
0 回答
70 浏览

python - sql - 如何将排名列添加到现有表

我有下表:

我想使用 alembic 添加一个“排名”列。添加本身非常简单,add_column但我还需要根据现有信息使用 sqlalchemy 填充该列(每个employee_id 都有自己的按id排序的等级)。

例如下表:

问题与类似。

唯一的区别是我需要它在 mysql 和 oracle 之上为 sqlalchemy 工作(需要更通用的解决方案)。

如何使用 engine.update 填充排名列?

编辑 1:这个问题不是关于如何通过 alembic 插入或更新记录。这是关于查找将执行特定操作的查询并使用 engine.update 运行此查询