标签: alembic

即使没有任何更改,Alembic 也会不断创建空的迁移文件

我正在开发一个使用 sqlalchemy、postgres 和 alembic 的应用程序。
\n项目结构如下:

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 alembic.ini\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 migrations\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 env.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 script.py.mako\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 versions\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 models\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 base.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 datamodel1.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 datamodel2.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 requirements.txt\n\n3 directories, 10 files\n
Run Code Online (Sandbox Code Playgroud)\n

其中:
\n的内容models/base.py是:

\n
from sqlalchemy.ext.declarative.api import declarative_base, DeclarativeMeta\n\nBase: DeclarativeMeta = declarative_base()\n
Run Code Online (Sandbox Code Playgroud)\n

的内容models/datamodel1.py是:

\n
from models.base import Base\nfrom sqlalchemy.sql.schema import Column\nfrom sqlalchemy.sql.sqltypes import String, Date, Float\n\n\nclass Model1(Base):\n    __tablename__ = 'model1_table'\n\n    model1_id = Column(String, primary_key=True)\n    col1 = Column(String)\n    col2 = Column(String)\n
Run Code Online (Sandbox Code Playgroud)\n

的内容models/datamodel2.py …

python postgresql sqlalchemy alembic

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

是否可以从列中删除唯一约束?

我尝试简单地删除unique=True约束并运行

flask db migrate
flask db upgrade
Run Code Online (Sandbox Code Playgroud)

在命令行中,但是当我运行我的烧瓶应用程序时,我仍然收到错误(sqlite3.IntegrityError) UNIQUE constraint failed

有没有一种简单的方法可以使用 Flask-migrate 来做到这一点,或者我应该切换到 alembic (我知道 Flask-migrate 只是围绕着它)?我不想删除整个表。谢谢你的帮助!

python sqlite sqlalchemy alembic flask-migrate

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

Alembic 给我“运行时警告:协程‘连接’从未等待过”

我转而使用 TortoiseORM 中的 SQLAlchemy,并认为我应该研究 Alembic 来处理其迁移。编辑env.pyalembic.ini文件后,我仍然无法让 alembic 生成任何迁移。

该错误sqlalchemy.exc.MissingGreenlet: greenlet_spawn has not been called; can't call await_only() here. Was IO attempted in an unexpected place? (Background on this error at: https://sqlalche.me/e/14/xd2s) sys:1: RuntimeWarning: coroutine 'connect' was never awaited是不言自明的,但我不知道到底要更改什么。

我正在遵循FastAPI-Users文档中的指示,但完全迷失了。

我尝试过的:

  • 设置run_migrations_offline()run_migrations_online()作为async
  • 使用asyncio.run()to 这样我就可以运行它们

模型.py

import os
from typing import AsyncGenerator
from fastapi import Depends
from fastapi_users.db import SQLAlchemyBaseUserTableUUID, SQLAlchemyUserDatabase
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from …
Run Code Online (Sandbox Code Playgroud)

python-3.x alembic fastapi

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

运行 alembic 命令导致 ImportError: 无法从 'sqlalchemy.sql.expression' 导入名称 '_BindParamClause'

每当我运行任何alembic命令时都会发生这种情况。我正在使用 sqlalchemy 版本 2.0.3

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/ado/anaconda3/lib/python3.8/site-packages/alembic/__init__.py", line 8, in <module>
    from . import op  # noqa
  File "/home/ado/anaconda3/lib/python3.8/site-packages/alembic/op.py", line 1, in <module>
    from .operations.base import Operations
  File "/home/ado/anaconda3/lib/python3.8/site-packages/alembic/operations/__init__.py", line 1, in <module>
    from .base import Operations, BatchOperations
  File "/home/ado/anaconda3/lib/python3.8/site-packages/alembic/operations/base.py", line 3, in <module>
    from .. import util
  File "/home/ado/anaconda3/lib/python3.8/site-packages/alembic/util/__init__.py", line 9, in <module>
    from .sqla_compat import (  # noqa
  File "/home/ado/anaconda3/lib/python3.8/site-packages/alembic/util/sqla_compat.py", line 8, in <module>
    from sqlalchemy.sql.expression …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy alembic

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

如何在sqlalchemy迁移脚本或sqlite的配置文件中打开'PRAGMA foreign_keys = ON'?

在合适的sqlite版本中,我们可以通过'PRAGMA foreign_keys = ON'强制执行外键约束.但是,每次进行连接时,用户都无法登录数据库.所以我想知道如何让它在sqlalchemy/alembic的迁移脚本中运行?非常感谢!

sqlite sqlalchemy alembic

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

SQLalchemy:alembic bulk_insert()失败

在将此标记为重复之前:

我确实看了这个问题/答案,我确实做了它的建议,但当我添加这个代码时:

permslookup = sa.Table('permslookup',
    sa.Column('perms_lookup_id', primary_key=True),
    sa.Column('name', sa.Unicode(40), index=True),
    sa.Column('description', sa.Text),
    sa.Column('value', sa.Numeric(10, 2)),
    sa.Column('ttype', sa.PickleType(), index=True),
    sa.Column('permission', sa.Unicode(40), index=True),
    sa.Column('options', sa.PickleType())
    )
Run Code Online (Sandbox Code Playgroud)

然后运行alembic upgrade head,我收到以下错误:

AttributeError: Neither 'Column' object nor 'Comparator' object has an attribute 'schema'
Run Code Online (Sandbox Code Playgroud)

当我检查完整的堆栈跟踪时,我注意到这导致了错误:

sa.Column('options', sa.PickleType())
Run Code Online (Sandbox Code Playgroud)

这是上面代码的最后一行......我该如何解决这个问题?我不知道如何解决它...任何形式的帮助将不胜感激.

这是我要插入的数据:

op.bulk_insert('permslookup',
    [
        {
            'id': 1,
            'name': 'accounts',
            'description': """ Have permission to do all transactions """,
            'value': 1,
            'ttype': ['cash', 'loan', 'mgmt', 'deposit', 'adjustments'],
            'permission': 'accounts',
            'options': None
        },
        {
            'id': 2,
            'name': …
Run Code Online (Sandbox Code Playgroud)

python mysql sqlalchemy alembic

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

保留迁移中的数据

使用此设置:

-Development environment
-Flask
-SQLAlchemy
-Postgres
-Possibility Alembic
Run Code Online (Sandbox Code Playgroud)

如果我有一个数据库,其中一些表填充了随机数据.据我所知,Flask-Migrate将使用Alembic,不会保留数据,只保持模型和数据库同步.

但是使用Alembic或者只是删除>创建所有表之间有什么区别

就像是:

db.create_all()
Run Code Online (Sandbox Code Playgroud)

第二个问题:

当模型中的某些变化时,数据会发生什么变化?数据会丢失吗?或者Alembic可以保留以前填充的数据?

好吧,我的想法是用一些数据填充数据库,然后避免模型更改时丢失任何数据.Alembic是解决方案吗?

或者我需要从.sql文件导入数据,例如,当我更改模型和数据库时?

python postgresql flask flask-sqlalchemy alembic

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

alembic:在修订文件中创建关系

我需要通过向现有表添加一个表和一列来更新我的数据库.新列和表应具有一对多关系.

这是alembic修订文件:

def upgrade():
    op.create_table('categories',
        sa.Column('category_id', sa.Integer, primary_key=True),
        sa.Column('category_name', sa.String(30)),
        sa.Relationship('post', backref='cat', lazy='dynamic') )
    op.add_column('post', sa.Column('category', sa.Integer, sa.ForeignKey('categories.category_id')) )
Run Code Online (Sandbox Code Playgroud)

问题出在这一行:

sa.Relationship('post', backref='cat', lazy='dynamic') )
Run Code Online (Sandbox Code Playgroud)

在这里定义关系的正确代码是什么?谢谢

sqlalchemy flask alembic

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

如何清除历史记录并从头开始运行所有迁移?

如何使用Alembic清除历史记录?我在中找不到此选项alembic history。我想从第一次迁移开始,而不是从最后一次应用开始。

python migration alembic

2
推荐指数
4
解决办法
1250
查看次数

如何使Alembic从Flask中的多个模型文件中识别模型

因此在Flask中,我models.py包含了所有我的模型定义。我想将其分离到一个models目录下的多个模型文件中。

我通过添加一些模型文件(例如models/user_model.pymodels/booking_model.py等进行了尝试,但alembic似乎无法检测到这些文件中的模型。

在带有Flask的标准alembic.ini中,我具有:

# A generic, single database configuration.

[alembic]
# template used to generate migration files
# file_template = %%(rev)s_%%(slug)s

# set to 'true' to run the environment during
# the 'revision' command, regardless of autogenerate
# revision_environment = false


# Logging configuration
[loggers]
keys = root,sqlalchemy,alembic

[handlers]
keys = console

[formatters]
keys = generic

[logger_root]
level = WARN
handlers = console
qualname =

[logger_sqlalchemy]
level = WARN
handlers =
qualname …
Run Code Online (Sandbox Code Playgroud)

python flask alembic

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