我正在尝试创建一个使用UUID作为主键的用户模型:
from src.db import db # SQLAlchemy instance
import sqlalchemy_utils
import uuid
class User(db.Model):
__tablename__ = 'user'
id = db.Column(sqlalchemy_utils.UUIDType(binary=True), primary_key=True, nullable=False)但是当我生成我收到的迁移时:
File "/home/pc/Downloads/project/auth/venv/lib/python3.6/site-packages/alembic/runtime/environment.py", line 836, in run_migrations
self.get_context().run_migrations(**kw)
File "/home/pc/Downloads/project/auth/venv/lib/python3.6/site-packages/alembic/runtime/migration.py", line 330, in run_migrations
step.migration_fn(**kw)
File "/home/pc/Downloads/project/auth/migrations/versions/efae4166f832_.py", line 22, in upgrade
sa.Column('id', sqlalchemy_utils.types.uuid.UUIDType(length=16), nullable=False),
NameError: name 'sqlalchemy_utils' is not defined`我试着解释一下我使用的模块,比如这,并使用SQLAlchemy的“内部”实现
Obs:如果我在sqlalchemy_utils中手动导入/migrations/version/efae4166f832_.py并删除自动生成的sa.Column('id', sqlalchemy_utils.types.uuid.UUIDType(length=16), nullable=False)的长度,那么它将工作很好
我使用generate.py脚本生成迁移:
from src import create_app
from src.db import db
from flask_migrate import Migrate
# Models
from src.user.models.user import User
app = create_app()
migrate = Migrate(app, db)`

MySQL引擎
我希望在生成迁移时,它会生成一个用户模型,该模型使用从SQLAlchemy Utils实现的UUID作为主键。
发布于 2019-02-01 01:46:50
谢谢,马可,但我已经修好了。我已经将导入import sqlalchemy_utils放入env.py和env.py中,我还添加了以下函数:
def render_item(type_, obj, autogen_context):
"""Apply custom rendering for selected items"""
if type_ == "type" and isinstance(obj, sqlalchemy_utils.types.uuid.UUIDType):
# Add import for this type
autogen_context.imports.add("import sqlalchemy_utils")
autogen_context.imports.add("import uuid")
return "sqlalchemy_utils.types.uuid.UUIDType(), default=uuid.uuid4"
# Default rendering for other objects
return False在env.py中,在同一个文件中,我在函数run_migrations_online中设置了render_item=render_item。
context.configure(
...,
render_item=render_item,
...
)我研究了自动完成这个任务,但是我找不到任何能帮助我的东西。
行动的顺序很重要:
export FLASK_APP=manage.pyflask db initflask db migrateflask db upgrade发布于 2019-01-30 12:35:04
你只需加上:
import sqlalchemy_utils到迁移文件夹中的script.py.mako
发布于 2022-07-01 16:06:41
背景
如果不必使用import sqlalchemy_utils语句手动编辑每个迁移文件,这将是非常理想的。
查看Alembic 文档,script.py.mako是“一个用于生成新迁移脚本的Mako模板文件”。因此,您需要重新生成您的迁移文件,因为Mako已经导入sqlalchemy_utils作为迁移文件生成的一部分。
修复
如果可能的话,删除旧的迁移(它们可能已经损坏),并像这样将import sqlalchemy_utils添加到script.py.mako文件中:
from alembic import op
import sqlalchemy as sa
import sqlalchemy_utils #<-- line you add
${imports if imports else ""}然后重新运行你的大脑迁移:
alembic revision --autogenerate -m "create initial tables"
当您查看迁移文件时,应该会看到已经通过mako脚本导入的sqlalchemy_utils。
希望这能帮上忙。
https://stackoverflow.com/questions/54055469
复制相似问题