标签: alembic

通过alembic脚本进行并发数据库表索引

是否可以通过alembic脚本为DB表创建并发索引?

我正在使用postgres DB,并且能够在postgres提示符下通过sql命令创建并发表索引.(并行创建索引on();)

但是找不到通过Db migration(alembic)脚本创建相同的方法.如果我们创建普通索引(不是并发),它将锁定DB表,因此不能并行执行任何查询.所以只想知道如何通过alembic(数据库迁移)脚本创建并发索引

python database sqlalchemy postgresql-9.1 alembic

10
推荐指数
2
解决办法
1358
查看次数

flask-migrate不检测模型

我在这里阅读(和观看)Flask-Migrate:https: //realpython.com/blog/python/flask-by-example-part-2-postgres-sqlalchemy-and-alembic/https:// www .youtube.com /手表?ν= YJibNSI-IAE#T = 21

从本教程开始做所有事情:

  • 我启动了一个本地postgres服务器(使用Postgres.App,它在postgresql:// localhost:5432启动服务器)
  • 根据上述教程更新配置
  • 更新了app.py,创建了models.py等.

安装Flask-Migrate并运行后

python manage.py db init
python manage.py db migrate
Run Code Online (Sandbox Code Playgroud)

它应该检测models.py中声明的所有表.

就我而言,它什么都没检测到.而且,根据对教程的评论,这不仅仅是我的情况.那么,我该如何做到这一点呢?

python postgresql flask alembic flask-migrate

10
推荐指数
1
解决办法
4164
查看次数

我应该如何在Heroku上运行alembic迁移?

我正在尝试在Heroku上运行一个相当简单的Flask + SQLAlchemy站点,但我不确定如何运行迁移来设置我的数据库.当我运行时heroku run alembic upgrade head,我收到以下错误:

Running `alembic upgrade head` attached to terminal... up, run.1
Traceback (most recent call last):
  File "/app/.heroku/venv/bin/alembic", line 12, in <module>
    load_entry_point('alembic==0.4.0', 'console_scripts', 'alembic')()
  File "/app/.heroku/venv/lib/python2.7/site-packages/alembic/config.py", line 255, in main
    CommandLine(prog=prog).main(argv=argv)
  File "/app/.heroku/venv/lib/python2.7/site-packages/alembic/config.py", line 250, in main
    self.run_cmd(cfg, options)
  File "/app/.heroku/venv/lib/python2.7/site-packages/alembic/config.py", line 241, in run_cmd
    **dict((k, getattr(options, k)) for k in kwarg)
  File "/app/.heroku/venv/lib/python2.7/site-packages/alembic/command.py", line 124, in upgrade
    script.run_env()
  File "/app/.heroku/venv/lib/python2.7/site-packages/alembic/script.py", line 191, in run_env
    util.load_python_file(self.dir, 'env.py')
  File "/app/.heroku/venv/lib/python2.7/site-packages/alembic/util.py", line 185, in …
Run Code Online (Sandbox Code Playgroud)

sqlalchemy heroku flask flask-sqlalchemy alembic

9
推荐指数
1
解决办法
2533
查看次数

Alembic:如何在模型中迁移自定义类型?

我的User模特是

class User(UserMixin, db.Model):
    __tablename__ = 'users'
    # noinspection PyShadowingBuiltins
    uuid = Column('uuid', GUID(), default=uuid.uuid4, primary_key=True,
                  unique=True)
    email = Column('email', String, nullable=False, unique=True)
    _password = Column('password', String, nullable=False)
    created_on = Column('created_on', sa.types.DateTime(timezone=True),
                        default=datetime.utcnow())
    last_login = Column('last_login', sa.types.DateTime(timezone=True),
                        onupdate=datetime.utcnow())
Run Code Online (Sandbox Code Playgroud)

其中GUIDsqlalchemy docs中描述的自定义类型(完全相同)

现在我跑的时候

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

我得到了我upgrade()

def upgrade():
    ### commands auto generated by Alembic - please adjust! ###
    op.create_table('users',
    sa.Column('uuid', sa.GUID(), nullable=False),
    sa.Column('email', sa.String(), nullable=False),
    sa.Column('password', sa.String(), nullable=False),
    sa.Column('created_on', …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask-sqlalchemy alembic

9
推荐指数
1
解决办法
3770
查看次数

sqlalchemy:alembic批量插入失败:'str'对象没有属性'_autoincrement_column'

我的模型看起来像

class Category(UserMixin, db.Model):
    __tablename__ = 'categories'
    uuid = Column('uuid', GUID(), default=uuid.uuid4, primary_key=True,
                  unique=True)
    name = Column('name', String, nullable=False)
    parent = Column('parent', String, nullable=False)
    created_on = Column('created_on', sa.types.DateTime(timezone=True),
                        default=datetime.utcnow())
    __table_args__ = (UniqueConstraint('name', 'parent'),)

    def __init__(self, name, parent):
        self.name = name
        self.parent = parent

    def __repr__(self):
        return '<Category:%s:%s:%s>' % (
            self.uuid, self.name, self.category_type)
Run Code Online (Sandbox Code Playgroud)

其中GUID是自定义sqlalchemy类型我使用alembic --autogenerate选项创建表

 op.create_table('categories',
                    sa.Column('uuid', UUID(), nullable=False),
                    sa.Column('name', sa.String(), nullable=False),
                    sa.Column('parent', sa.String(), nullable=False),
                    sa.Column('created_on', sa.DateTime(timezone=True),
                              nullable=True),
                    sa.PrimaryKeyConstraint('uuid'),
                    sa.UniqueConstraint('name', 'parent'),
                    sa.UniqueConstraint('uuid')
    )
Run Code Online (Sandbox Code Playgroud)

和PostgreSQL表一样

            Table "public.categories"
   Column …
Run Code Online (Sandbox Code Playgroud)

python postgresql sqlalchemy alembic

9
推荐指数
1
解决办法
4109
查看次数

如何在SQLAlchemy中表示自定义PostgreSQL域?

我开始将Alembic合并到我已经使用SQLAlchemy表定义的项目中.目前我的数据库架构是在我的应用程序外部管理的,我想将整个架构带入我的表定义文件中.

在PostgreSQL中,我使用自定义域来存储电子邮件地址.PostgreSQL DDL是:

CREATE DOMAIN email_address TEXT CHECK (value ~ '.+@.+')
Run Code Online (Sandbox Code Playgroud)

如何在SQLAlchemy中表示此域的创建及其作为列数据类型的用法?

python orm sqlalchemy alembic sql-domain

9
推荐指数
1
解决办法
545
查看次数

如何删除没有名称定义的约束?

我有 Alembic 迁移,它声明了这样的外键约束:

op.create_table(
    'that',
    ...
    Column('this_id', String),
    ForeignKeyConstraint(['this_id'], ['this.id'])
    ...
)
Run Code Online (Sandbox Code Playgroud)

我的项目需要支持两个数据库——PostgreSQL 和 MySQL。由于约束的名称没有定义,每个数据库都会自动生成它。在 MySQL 中它看起来像this_ibfk_1,在 Postgres 中看起来像that_this_id_key.

现在我需要编写一个迁移来删除约束。但考虑到我不知道它的名字,我该如何引用它呢?

mysql postgresql sqlalchemy alembic

9
推荐指数
2
解决办法
7682
查看次数

添加新列时,在alembic中设置列顺序

我正在努力找到一种干净的方式(没有原始SQL)来设置alembic中的列顺序.例如,我想在'id'列之后添加一个名为'name'的新列,如下所示:

from alembic import op
import sqlalchemy as sa

...

op.add_column(
    'people',
    sa.Column(
        'name',
        sa.String(),
        nullable=False
    ),
    after='id'
)
Run Code Online (Sandbox Code Playgroud)

但是当然,alembic没有'after'参数,因此这段代码失败了,而且我没有在docs中找到与'after'参数相当的东西.我只能将列附加到表的末尾.

任何人都可以建议如何在alembic/sqlalchemy中实现我想要的东西?没有原始SQL可能吗?

python sqlalchemy database-migration alembic

9
推荐指数
1
解决办法
932
查看次数

Alembic 无法识别 False 默认值

在维护 SQLAlchemy 数据模型并利用 alembic 进行版本控制时,我所做的以下代码更改导致了空修订:

some_column = Column(Boolean, nullable=False, default=False)
Run Code Online (Sandbox Code Playgroud)

以前是:

some_column = Column(Boolean, nullable=False)
Run Code Online (Sandbox Code Playgroud)

因此添加默认值不会对 alembic 产生任何变化,即生成一个空修订版。我尝试了 SQLAlchemy 提供的其他值,例如false()和,expression.false()而不是False,但结果是相同的(空的 alembic 修订版)。也尝试server_default过代替default. 有问题的数据库是 PostgreSQL。

当然,通过空修订,我的意思是 alembic 无法识别 SQLAlchemy 中所做的任何更改:

def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    pass
    # ### end Alembic commands ###


def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    pass
    # ### end Alembic commands ###

Run Code Online (Sandbox Code Playgroud)

感谢这方面的任何帮助。

python database postgresql sqlalchemy alembic

9
推荐指数
2
解决办法
6549
查看次数

如何使用 alembic 对函数和触发器进行版本控制?

假设数据库中有一些带有函数的触发器,如下所示:

-- Insert a new entry into another table
-- every time a NEW row is inserted
CREATE FUNCTION trgfunc_write_log() RETURNS TRIGGER AS $$
BEGIN
    INSERT INTO some_other_table (
        -- some columns
        meter_id,
        date_taken,
        temperature,
    ) values (
        NEW.meter_id,
        NEW.time_taken,
        NEW.temperature
    );

    return NEW;
END;
$$ language 'plpgsql';

-- The trigger itself: AFTER INSERT
CREATE TRIGGER trg_temperature_readings
AFTER INSERT ON temperature_readings
FOR EACH ROW
EXECUTE FUNCTION trgfunc_write_log();
Run Code Online (Sandbox Code Playgroud)

通常,此触发器将位于我的 SqlAlchemy 模型旁边,并使用如下内容自动创建:

from sqlalchemy import DDL, event
from sqlalchemy.ext.declarative import declarative_base

Base …
Run Code Online (Sandbox Code Playgroud)

python sql postgresql triggers alembic

9
推荐指数
1
解决办法
4984
查看次数