问题标签 [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 - 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
. 有什么问题,我该如何解决?
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 Campaign
to Politician
。
有人可以解释为什么这会导致唯一约束错误,因为白名单和黑名单位于不同的表上?另外,我怎样才能使这个关系模式工作?
python - 包括 alembic 作为自定义安装程序脚本的一部分,以创建或升级数据库?
我正在向用户发送一个 python 脚本,它将安装我们的产品。作为安装的一部分,我还希望能够创建一组数据库表。
看来,alembic 非常适合这项工作。因为对于我们产品的每次升级,我都可以让 alembic 升级数据库。
为了让我们的用户真正简单,有没有办法:
- 将 alembic 包含在我们的发行版中,而不强制最终用户运行 pip 来安装它?
- 从 python 脚本调用 alembic,这样我们就可以在 Python 中做所有事情(无需创建 bat 或 sh 文件)?
这必须跨平台运行,因此任何依赖于平台的安装步骤(例如,像运行“make”)都是不可取的。
python - alembic - 使用包资源作为 script_location 的示例
我正在尝试将 Alembic 迁移作为 python 包分发的一部分。由于将安装此发行版,因此 Alembic 脚本目录(包含迁移)最终将被复制到 python 包文件夹。在这种情况下,我如何告诉 Alembic 在哪里可以找到这个目录?
在 Alembic 文档中,它说migration
可以在config.ini
文件中指定目录作为包引用:
- script_location - 这是 Alembic 环境的位置。它通常被指定为文件系统位置,相对的或绝对的。如果位置是相对路径,则将其解释为相对于当前目录。
(剪断)
为了支持将自身打包成 .egg 文件的应用程序,该值也可以指定为包资源,在这种情况下,resource_filename() 用于查找文件(0.2.2 中的新功能)。任何包含冒号的非绝对 URI 在这里都被解释为资源名称,而不是直接的文件名。
该文档没有提供更多信息或示例。
有没有人成功地实现了这一点?您究竟如何使您的migration
scripting_folder 成为“包资源”?那么你如何告诉 alembic 在哪里可以找到它呢?
python - 如何使用 alembic 将 MySQL 表转换为 utf8 字符集?
我的数据库是 MySQL。我使用 SqlAlchemy ORM 来定义和访问它。我使用 Alembic 进行迁移。我有一个模型,它的字段过去只包含英文文本(Ascii/latin-1)。现在,该字段需要包含 Unicode 文本。为了将我的模型转换为支持 MySQL 的 Unicode,我需要添加以下类级别属性:mysql_character_set = 'utf8'
到目前为止,一切都很好。我想将此属性添加为 Alembic 迁移脚本的一部分。我通常使用 Alembic 出色的自动生成命令:
问题是这个命令没有捕捉到每个模型的变化,特别是没有添加mysql_character_set属性。
如何手动将此属性添加到 alembic 迁移脚本?
python - Sqlalchemy(和alembic)没有多态联合的具体表继承
我是 SQLAlchmey 的新手,我正在尝试实现以下对象/数据库表结构(也使用 alembic):
我希望所有其他配置类都从中继承预定义的列:
BaseConfig表不是真正的表,它只是一个保存公共列的类。除此之外 - A 和 B 之间没有任何关系,也不需要共享 pk 等。似乎使用“ polymorphic_union ”在这里也无关紧要。
通过尝试运行 alembic autogenerate 我得到了 BaseConfig 没有表映射类的错误 - 这是真的,我真的没有理由将“多态联合”选项添加到 BaseConfig,因为这个类是通用的. 有什么建议么?(在 Django with south 中,这是开箱即用的,但在这里似乎不容易支持这种行为)。
谢谢,李
python - Alembic - sqlalchemy 初始迁移
我在创建初始迁移时遇到问题,该迁移将自动包含我在 models.py 中使用共享基础(declarative_base)定义的表。
当我输入命令时:
alembic 创建一个空文件。
我的配置或方法有什么问题?
项目.base.py:
环境.py:
样品型号:
编辑:
我发现那Base.metadata.sorted_tables
是空的。
python - Alembic - sqlalchemy 未检测到现有表
我问了一个关于如何使用检测表的问题( Alembic - sqlalchemy initial migration )
为了
在我将模型导入 env.py 文件后,它似乎工作正常,但它没有检测到实际存在的表,因此它创建了一个包含所有表的迁移文件,例如:
我试过了:
但在运行该命令并运行 autogenerate 命令后,系统会再次生成所有模型。
我该如何避免这个问题?
编辑:
ENV.py:
我删除了数据库并进行了迁移
python - 在迁移中保留数据
使用此设置:
如果我有一个数据库,其中一些表填充了随机数据。据我所知,将使用 Alembic的Flask-Migrate不会保留数据,只会保持模型和数据库同步。
但是使用 Alembic 或只是删除 > 创建所有表有什么区别?
就像是:
第二个问题:
当模型发生变化时,数据会发生什么变化?数据会丢失吗?或者 Alembic 可以保留以前填充的数据?
好吧,我的想法只是用一些数据填充数据库,然后在模型更改时避免任何数据丢失。Alembic是解决方案吗?
或者我需要从 .sql 文件导入数据,例如,当我更改模型和数据库时?
python - sql - 如何将排名列添加到现有表
我有下表:
我想使用 alembic 添加一个“排名”列。添加本身非常简单,add_column
但我还需要根据现有信息使用 sqlalchemy 填充该列(每个employee_id 都有自己的按id排序的等级)。
例如下表:
问题与此类似。
唯一的区别是我需要它在 mysql 和 oracle 之上为 sqlalchemy 工作(需要更通用的解决方案)。
如何使用 engine.update 填充排名列?
编辑 1:这个问题不是关于如何通过 alembic 插入或更新记录。这是关于查找将执行特定操作的查询并使用 engine.update 运行此查询