标签: alembic

是否有一种简单的方法可以告诉alembic迁移到特定版本?

Alembic具有升级和降级到特定修订的命令,例如在命令行上:

alembic upgrade <target-revision>
Run Code Online (Sandbox Code Playgroud)

alembic downgrade <target-revision>
Run Code Online (Sandbox Code Playgroud)

如果您不知道是升级还是降级,是否有一种简单的方法可以迁移到特定修订版?即

alembic migrate <target-revision>
Run Code Online (Sandbox Code Playgroud)

我可以通过查看历史,当前和目标修订来确定方向,但这感觉就像打击图书馆一样.我是否遗漏了某些东西,或者有没有理由不提供开箱即用的东西?

database database-migration alembic

18
推荐指数
1
解决办法
7700
查看次数

如何让Alembic识别SQLModel数据库模型?

使用SQLModel如何让 alembic 识别以下模型?

from sqlmodel import Field, SQLModel

class Hero(SQLModel, table=True):
    id: int = Field(default=None, primary_key=True)
    name: str
    secret_name: str
    age: Optional[int] = None
Run Code Online (Sandbox Code Playgroud)

我一直在研究的一种方法是导入 Alembic 的 SQLalchemy 模型,但查看源代码我找不到如何做到这一点。

如何使 Alembic 与 SQLModel 模型一起使用?

sqlalchemy alembic pydantic fastapi sqlmodel

18
推荐指数
1
解决办法
1万
查看次数

使用alembic获取表值并更新到另一个表.

我有oauth secretoauth keyclient表中.现在我将它们移动到oauth credentials将在迁移期间创建的表.Alembic生成以下架构进行升级.

from myapp.models import Client, ClientCredential
from alembic import op
import sqlalchemy as sa


def upgrade():
### commands auto generated by Alembic - please adjust! ###
    op.create_table('client_credential',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('created_at', sa.DateTime(), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=False),
    sa.Column('client_id', sa.Integer(), nullable=False),
    sa.Column('key', sa.String(length=22), nullable=False),
    sa.Column('secret', sa.String(length=44), nullable=False),
    sa.Column('is_active', sa.Boolean(), nullable=False),
    sa.ForeignKeyConstraint(['client_id'], ['client.id'], ),
    sa.PrimaryKeyConstraint('id'),
    sa.UniqueConstraint('key')
   )
   # Here I need to copy data from table A to newly created Table.
   # …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy alembic

17
推荐指数
1
解决办法
1万
查看次数

Alembic - sqlalchemy不检测现有表

我已经问了一个关于如何通过使用检测表的问题(Alembic - sqlalchemy初始迁移)

target_metadata = Base.metadata
Run Code Online (Sandbox Code Playgroud)

对于

alembic revision --autogenerate -m "initial migration"
Run Code Online (Sandbox Code Playgroud)

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

def upgrade():
    ### commands auto generated by Alembic - please adjust! ###
    op.create_table('Brand',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('name', sa.String(), nullable=True),
    sa.Column('slug', sa.String(), nullable=True),
    sa.Column('date_created', sa.DateTime(), nullable=True),
    sa.Column('date_updated', sa.DateTime(), nullable=True),
    sa.PrimaryKeyConstraint('id'),
    schema='Products'
    )

def downgrade():
    ### commands auto generated by Alembic - please adjust! ###
    op.drop_table('ProductFile', schema='Products')
Run Code Online (Sandbox Code Playgroud)

我试过了:

alembic stamp head
Run Code Online (Sandbox Code Playgroud)

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

from project.apps.users.models import *
from project.apps.orders.models import *
from project.apps.products.models import *

from project.base …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy alembic

16
推荐指数
2
解决办法
5974
查看次数

如何处理名称冲突的python包?

我正在使用两个具有相同名称的python包.

是否有规范或pythonic方式来处理安装两个名称冲突的包?到目前为止,我只是偶尔需要在开发/构建期间使用其中一个软件包,所以我一直在使用一个单独的virtualenv来处理冲突,但它使构建步骤更复杂,我想知道是否没有更好的方法来处理它.

python namespaces setuptools alembic

16
推荐指数
1
解决办法
2007
查看次数

如何在alembic中使用alter_column?

我正在用alembic编写一个迁移,但似乎不可能将server_defaults的值从某个东西改为零.

我的代码:

op.alter_column("foo", sa.Column("bar", sa.DateTime(timezone=False), server_default=None, nullable=True))
Run Code Online (Sandbox Code Playgroud)

如果我在迁移后检查,默认仍然是NOW()

python sqlalchemy alembic

15
推荐指数
2
解决办法
9296
查看次数

使用 sqlalchemy/alembic 为现有数据库创建“零状态”迁移,并为该现有数据库“伪造”零迁移

我想将 alembic 添加到现有的 sqlalchemy 使用的项目中,并带有一个有效的生产数据库。我找不到进行“零”迁移的标准方法是什么 == 将数据库设置为现在的迁移(对于设置环境的新开发人员)

目前我已经将 import 声明性基类和使用它的所有模型添加到 env.py ,但第一次alembic -c alembic.dev.ini revision --autogenerate确实创建了现有表。

我需要“伪造”现有安装的迁移 - 使用代码。对于 django ORM,我知道如何进行这项工作,但我找不到使用 sqlalchemy/alembic 执行此操作的正确方法

python sqlalchemy alembic

15
推荐指数
2
解决办法
6392
查看次数

如何将自己的模型导入myproject/alembic/env.py?

我想alembic revision --autogenerate用我自己的模型类.正因为如此,我需要将它们导入myproject/alembic/env.py在文档描述.但即使我尝试了很多变化,这也行不通.

我不确定在哪种情况下(不知道这是否是正确的单词)alembic运行env.py.也许这会导致一些错误.

这是我使用的目录和文件结构.

myproject/
    common/
        __init__.py
        model.py
    alembic/
        env.py
Run Code Online (Sandbox Code Playgroud)

错误就是那种

    from .common import model
SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)

myproject本身只是一个存储库/工作目录.它不安装到系统中(用pip3,apt-get,easyinstall或其他任何东西).

python-import python-3.x alembic

14
推荐指数
4
解决办法
3660
查看次数

Alembic支持多种Postgres模式

如何使用Alembic --autogenerate迁移SQL Alchemy模型中未硬编码的多个 Postgres模式?(镜像问题的SQLAlchemy支持Postgres架构,但对于Alembic).

特别是,我们使用Postgres模式来分离共享同一组表的不同客户端.此外,客户端之间存在共享内容的模式.SQL Alchemy模型不了解模式,模式是在运行时使用设置的session.execute("SET search_path TO client1,shared").

默认情况下--autogenerate根本没有帮助,因为它检测到模型中不存在的多个模式,最终删除模式并重新创建默认模式中的每个表.

我真的想使用--autogenerate正确的管道来正确设置模式.关于Alembic的API是否/如何做到这一点的任何建议?

python sqlalchemy alembic

13
推荐指数
2
解决办法
4871
查看次数

Alembic + Sqlalchemy多列独特约束

我正在尝试使用sqlalchemy创建一个多列唯一约束,它将由Alembic在其自动升级脚本生成器中获取.

我使用以下方法创建约束:

来自import UniqueConstraint我模型中的sqlalchemy

UniqueConstraint('col1', 'col2', 'number', name='uix_table_col1_col2_col3')
Run Code Online (Sandbox Code Playgroud)

但是,Alembic在自动脚本生成中没有采用这种方法.

我可以通过添加来在Alembic脚本中手动创建它.

op.create_unique_constraint('uq_table_col1_col2_col3', 'table', ['col1', 'col2', 'col3'])
Run Code Online (Sandbox Code Playgroud)

是否有办法让Alembic自动生成?

谢谢您的帮助.

python flask-sqlalchemy alembic

13
推荐指数
1
解决办法
2869
查看次数