标签: alembic

使用declarative_base派生对象的alembic create_table

我有一个Alchemy ORM对象:

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()


class MyORM(Base):
    id = Column(Integer, primary_key=True)
    name = Column(String(128), unique=True, nullable=False)
Run Code Online (Sandbox Code Playgroud)

使用alembic创建表时,我执行以下操作:

def upgrade():
    op.create_table(
        'myorm',
        sa.Column('id', sa.Integer, primary_key=True),
        sa.Column('name', sa.String(128), nullable=False),
    )
Run Code Online (Sandbox Code Playgroud)

问题:有没有办法使用MyORM类创建表?像这样的东西:

def upgrade():
    op.create_table(
        'myorm',
        sa.BaseObject(MyORM)
    )
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy alembic

2
推荐指数
1
解决办法
1117
查看次数

alembic 如何将所有修订文件合并为一个文件?

alembic 版本目录中有 100 多个文件。如何使用 alembic 命令将这些文件合并为一个文件?

我尝试使用这个:

alembic revision --autogenerate
Run Code Online (Sandbox Code Playgroud)

但不起作用!有人有好主意吗?

python flask alembic

2
推荐指数
1
解决办法
3044
查看次数

如何在新的应用程序部署中将数据库与 Flask-Migrate 同步?

将应用程序部署到新服务器(即数据库为空)时,如何使用 Flask-Migrate 正确同步数据库?

当我已经有了一些架构时,我已经将 Flask-Migrate 添加到项目中,所以我没有“初始”迁移所有create_table(). 现在,当我manage.py db upgrade在部署脚本中执行此操作时,我得到relation "..." does not exist.

是否有任何内置方法来检测空数据库并运行“create_all()”而不是迁移?这就是 Alembic's Cookbook 的建议。由于我已经在使用 Flask-Migrate,因此我正在寻找某种统一的处理迁移方式。

python flask alembic flask-migrate

2
推荐指数
1
解决办法
1950
查看次数

使用SqlAlchemy和Alembic创建部分索引

我有以下带有索引的模型:

class User(TableMixin, Base):
    username = Column(String, nullable=False, unique=False)
    password = Column(String, nullable=False, unique=False)

    Index('ix_active_username', "active", username,
          unique=True,
          postgresql_where=("active" is True)
          )
Run Code Online (Sandbox Code Playgroud)

与TabbleMixin类一起

class TableMixin():
    id = Column(Integer, primary_key=True)
    active = Column(Boolean, nullable=False, default=True)
Run Code Online (Sandbox Code Playgroud)

我想在我的postgres db中创建的索引:

CREATE UNIQUE INDEX unique_active_username on user (username, active) 
where active = True;
Run Code Online (Sandbox Code Playgroud)

Active在引号之间,因为在User类内部无法识别,因此无法识别。

在我运行“高级修订--autogenerate”之后,该alembic文件为空。有人知道我在做什么错吗?

编辑:我所要做的就是将索引放在类的范围之外。并更改到

postgresql_where=(User.active == true())
Run Code Online (Sandbox Code Playgroud)

所有代码:

class User(TableMixin, Base):
    username = Column(String, nullable=False, unique=False)
    password = Column(String, nullable=False, unique=False)

class TableMixin():
    id = Column(Integer, primary_key=True)
    active = Column(Boolean, nullable=False, default=True)

Index('ix_active_username', …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy alembic

2
推荐指数
1
解决办法
950
查看次数

Alembic:包括拒绝带有字符的字符串的约束

我有一张看起来像这样的桌子

> select * from mytable
  id        value
0  1  hello world
1  2  hello_world
2  3  hello+world
Run Code Online (Sandbox Code Playgroud)

我试图强加一个 alembic 检查约束,其中值value不能有:字符。我将如何使用alembic.op对象来做到这一点?什么是upgrade()downgrade()功能?

编辑:我使用的数据库是 Mysql。

python sqlalchemy alembic sql-like

2
推荐指数
1
解决办法
980
查看次数

Alembic,如何更改ForeigenKey列

我正在使用Alembic 0.8.9,SQLAlchemy 1.1.4,并且我的数据库是MySQL数据库。
我正在更改表和外部列:

在我的数据库中,我将“ 器官 ”表重命名为“ 用途 ”。使用

from alembic import op

def upgrade():
    op.rename_table('organs', 'purposes')
Run Code Online (Sandbox Code Playgroud)

之后,我想在另一个表中更新我的ForeignKey:

之前

class Order(DeclarativeBase):
    __tablename__ = 'orders'
    id = Column(Integer, autoincrement=True, primary_key=True)

    organ_id = Column(Integer, ForeignKey('organs.id'))
Run Code Online (Sandbox Code Playgroud)

之后

class Order(DeclarativeBase):
    __tablename__ = 'orders'
    id = Column(Integer, autoincrement=True, primary_key=True)

    purpose_id = Column(Integer, ForeignKey('purposes.id'))
Run Code Online (Sandbox Code Playgroud)

我需要编写一个Alembic迁移脚本来帮助此更改反映在数据库中。如何更改ForeignKey列?

谢谢您的帮助

python mysql sqlalchemy turbogears2 alembic

2
推荐指数
1
解决办法
2493
查看次数

如何在脚本中调用flask migrate api

我有一个数据库db。我想判断是否flask_migratedb. 如果没有,upgrade db. 在 python 脚本中有命令,但没有关于调用migrate, 的例子upgrade。中的测试文件flask_migrate也运行命令:

(o, e, s) = run_cmd('python app.py db migrate')
Run Code Online (Sandbox Code Playgroud)

python alembic flask-migrate

2
推荐指数
1
解决办法
1266
查看次数

有什么方法可以在Alembic中生成顺序的修订版ID?

我将Alembic用作Python项目的数据库迁移工具。当我运行这样的命令时:

alembic revision -m "adding a column"
Run Code Online (Sandbox Code Playgroud)

...它将添加一个新文件alembic/versions/xxxxxxxxxxxx_adding_a_column.py,该文件名为where xxxxxxxxxxxx是随机生成的12位数字的哈希。

从使人可读的角度来看,这有点问题,因为这意味着当查看alembic/versions目录时,所有文件将以随机顺序出现,而不是按顺序/时间顺序出现。

Alembic中是否有任何选项可确保这些前缀修订ID是连续的?我想我可以手动重命名文件,然后更新引用,但是我想知道是否已经有了类似的功能。

sqlalchemy database-migration alembic

2
推荐指数
3
解决办法
1104
查看次数

单独模式中的 Alembic 版本表

我有 100 个用于 postgres 中不同应用程序的 alembic 版本表。一些应用程序使用不同的用户名进行迁移,并且可以search_path在 postgres 中为这些应用程序迁移设置。基于数据库用户名,由于search_path,版本表是在不同的postgres schema 中创建的。一些应用程序使用通用用户名并最终在公共模式中出现版本表名称冲突,因为它们没有将 search_path 设置为特定模式。如何让 alembic 使用特定的 postgres 架构来创建版本表?

python-3.x alembic

2
推荐指数
1
解决办法
940
查看次数

使用Flask-Migrate在多个分支上工作

我正在使用Flask-Migrate(Alembic)管理SQLAlchemy数据库迁移。我正在两个具有不同迁移的不同分支。

  1. 如果切换分支,则会收到未迁移的错误消息。
  2. 如果我将此分支合并到父分支,则需要在两个分支上降级迁移并创建新分支。如果不这样做,我会得到迁移的冲突错误。

我怎样才能更轻松?也许其他工具更像Django的迁移工具,但适用于Flask吗?

python git sqlalchemy alembic flask-migrate

2
推荐指数
1
解决办法
282
查看次数