标签: alembic

alembic修订版 - 多个头(由于分支)错误

我有一个应用程序,我想今天为它创建一个新的迁移.我跑的时候

$ alembic revision -m "__name__"
Run Code Online (Sandbox Code Playgroud)

我收到了一条消息

Only a single head is supported. The script directory has multiple heads (due branching), which must be resolved by manually editing the revision files to form a linear sequence. 
Run `alembic branches` to see the divergence(s).
Run Code Online (Sandbox Code Playgroud)

运行

alembic branches
Run Code Online (Sandbox Code Playgroud)

什么都没有

我是alembic的新手.有2个开发人员正在使用这个应用程序,我们有2个git分支 - 主和开发(我不确定这是否与它有关).

关于这是什么的任何线索?

python git alembic

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

sqlalchemy.exc.ArgumentError:无法加载插件:sqlalchemy.dialects:driver

我正在尝试运行alembic迁移,当我运行时

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

它说不出来

sqlalchemy.exc.ArgumentError: Can't load plugin: sqlalchemy.dialects:driver
Run Code Online (Sandbox Code Playgroud)

数据库网址是

postgresql+psycopg2://dev:passwd@localhost/db
Run Code Online (Sandbox Code Playgroud)

我甚至psycopg2安装在我的virtualenv中

$yolk -l
Flask-Login     - 0.1.3        - active
Flask-SQLAlchemy - 0.16         - active
Flask           - 0.9          - active
Jinja2          - 2.6          - active
Mako            - 0.7.3        - active
MarkupSafe      - 0.15         - active
Python          - 2.7.2        - active development (/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload)
SQLAlchemy      - 0.8.0        - active
Werkzeug        - 0.8.3        - active
alembic         - 0.4.2        - active
antiorm         - 1.1.1        - active …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy psycopg2 alembic

26
推荐指数
3
解决办法
4万
查看次数

Alembic可以自动生成列更改吗?

我可以alembic --autogenerate在添加/删除列时使用 .

但是,当我想修改例如200个字符到2000个字符的"url"列时,它不会检测到更改.

如何创建Alembic(使用SQLAlchemy),检测更改并自动生成脚本到我的模型的各种列的"大小",并为PostgreSQL创建"alter_column"命令?

编辑:

为什么不使用alembic自动添加:

op.alter_column('mytable', 'url', type_=sa.String(2000), existing_type=sa.String(length=200), nullable=True)
Run Code Online (Sandbox Code Playgroud)

python postgresql sqlalchemy flask alembic

26
推荐指数
1
解决办法
6025
查看次数

撤消上次Alembic迁移

我创建了一个迁移alembic revision --autogenerate,将它应用到我的开发数据库中alembic upgrade head,然后意识到它不是我想要的.

如何恢复迁移,以便我可以调整它并再试一次?

python sqlalchemy alembic

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

Alembic:如何向现有列添加唯一约束

我有一个表'test',其列'Name'没有约束.ALTER通过给它一个UNIQUE约束我需要这个专栏.我该怎么办?

我应该使用op.alter_column('???')create_unique_constraint('???')?新列不是create_unique_constraint而不是现有列吗?

sqlalchemy flask-sqlalchemy alembic

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

Alembic:alembic修订版称导入错误

我正在尝试将我的Flask项目与Alembic
我的应用程序结构集成

project/
       configuration/
                    __init__.py
                    dev.py
                    test.py
       core/
           # all source code
       db/
         migrations/
                    __init__.py
                    alembic.ini
                    env.py
                    versions/
Run Code Online (Sandbox Code Playgroud)

当我尝试从我的db目录运行以下内容时,我明白了

 File "migration/env.py", line 55, in run_migrations_online
    from configuration import app, db
ImportError: No module named configuration
Run Code Online (Sandbox Code Playgroud)

我尝试了请求一个简单的alembic工作示例中提到的自动生成迁移的解决方案,但它对我不起作用

env.py run_migrations_online()改变的方法是

def run_migrations_online():
    """Run migrations in 'online' mode.

    In this scenario we need to create an Engine
    and associate a connection with the context.

    """
    import os
    import sys

    sys.path.append(os.getcwd())
    from configuration …
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy alembic

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

修改数据作为alembic升级的一部分

我想修改一些数据库数据作为alembic升级的一部分.

我以为我可以在迁移升级中添加任何代码,但以下操作失败:

def upgrade():
    ### commands auto generated by Alembic - please adjust! ###
    op.add_column('smsdelivery', sa.Column('sms_message_part_id', sa.Integer(), sa.ForeignKey('smsmessagepart.id'), nullable=True))
    ### end Alembic commands ###

    from volunteer.models import DBSession, SmsDelivery, SmsMessagePart

    for sms_delivery in DBSession.query(SmsDelivery).all():
        message_part = DBSession.query(SmsMessagePart).filter(SmsMessagePart.message_id == sms_delivery.message_id).first()
        if message_part is not None:
            sms_delivery.sms_message_part = message_part
Run Code Online (Sandbox Code Playgroud)

出现以下错误:

sqlalchemy.exc.UnboundExecutionError: Could not locate a bind configured on mapper Mapper|SmsDelivery|smsdelivery, SQL expression or this Session
Run Code Online (Sandbox Code Playgroud)

我真的不明白这个错误.我该如何解决这个问题,或者这样的操作不可能?

python sqlalchemy alembic

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

改变Alembic的主键?

我已经阅读了文档,但我无法在任何地方找到相关说明.我尝试删除旧密钥并添加一个新密钥,但这会让我产生错误:

op.drop_constraint('PRIMARY', 'some_table', type_='primary')
op.create_primary_key('PRIMARY', 'some_table', ['col1', 'col2'])

sqlalchemy.exc.OperationalError: (OperationalError) (1025, "Error on rename of ... (errno: 150 - Foreign key constraint is incorrectly formed)") 'ALTER TABLE some_table DROP PRIMARY KEY ' ()
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

python sqlalchemy alembic

21
推荐指数
2
解决办法
8550
查看次数

使用Flask-SQLAlchemy在Alembic自动生成迁移时未检测到任何更改

我无法让Alembic使用db.Model(Flask-SQLAlchemy)而不是使用(Flask-SQLAlchemy)自动生成从更改到类的候选迁移Base.

我已修改env.py为创建我的Flask应用程序,导入所有相关模型,初始化数据库,然后运行迁移:

...
uri = 'mysql://user:password@host/dbname?charset=utf8'
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = uri
app.config['SQLALCHEMY_ECHO'] = True
db.init_app(app)
with app.test_request_context():
    target_metadata = db.Model.metadata
    config.set_main_option('sqlalchemy.url', uri)
    if context.is_offline_mode():
        run_migrations_offline()
    else:
        run_migrations_online()
...
Run Code Online (Sandbox Code Playgroud)

这种方法工作正常drop_all(),create_all()(例如,重新创建单元测试的测试分贝时),但似乎在这种情况下落空.自动生成的版本脚本始终具有空的升级和降级方法,例如,

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)

我的更改包括重命名列,更改列定义等 …

sqlalchemy database-migration flask flask-sqlalchemy alembic

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

Alembic - 自发生成空迁移

我试图Alembic第一次使用,并希望使用此处--autogenerate描述的功能

我的项目结构看起来像

project/
       configuration/
                    __init__.py
                    dev.py
                    test.py
       core/
           app/
              models/
                    __init__.py
                    user.py
       db/
          alembic/
                  versions/
                  env.py
          alembic.ini
Run Code Online (Sandbox Code Playgroud)

我使用Flask,并SQLAlchemy和他们的Flask-SQLAlchemy扩展.我的模特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)

如上所述这里,我修改env.py的样子

from configuration import app

alembic_config = config.get_section(config.config_ini_section) …
Run Code Online (Sandbox Code Playgroud)

python migration flask flask-sqlalchemy alembic

19
推荐指数
5
解决办法
2万
查看次数