django-sorcery不会自动生成迁移

时间:2019-01-23 20:50:39

标签: python django sqlalchemy django-sorcery

我正在使用django-sorcery库,并且一直在尝试进行一些迁移:

django-admin sorcery revision -m "Second revision" --autogenerate -v 1 my_app

当我第一次运行命令时,我看到一条错误消息:

FileNotFoundError: [Errno 2] No such file or directory: [... snip ...]python3.7/site-packages/django_sorcery/db/alembic/script.py.mako

不确定为什么pip包中缺少该模板,我手动将其重新添加。

现在,即使我指定了--autogenerate标志,该命令也只会生成空的迁移文件。

我应该在某个地方扔一个env.py文件吗?这个命令实际上应该起作用吗?帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

丢失的模板实际上是在最近的发行版中解决的,因此建议您尝试一下。

关于未使用的模型,可能有一些有用的想法

  • 模型必须是硬化模型。为了使它成为db.Model的子类:
from django_sorcery.db import databases
db = databases.get("default")
class MyModel(db.Model):
    ...
  • 模型需要在INSTALLED_APPS之一中定义。内部魔术师使用get_containing_app_config获取模型的相应django应用程序,因为sqlalchemy模型不是本地在django应用程序中注册的。

  • 默认情况下不需要其他,因此不需要传统的env.py。应用AppConfig中允许一些基本的自定义:

    • version_table-默认为alembic_version_{app.label}
    • version_table_schema

    如果还不够的话,可以使用几个signals来挂钩创建自定义的Alembic配置

应该可以使迁移命令起作用。回购随附test_site,其中包含一个规范的polls应用进行测试。您可以尝试使用它和Alembic迁移:

$ cd test_site
$ ./manage.py sorcery revision -m 'initial migration' -r 0001 --autogenerate polls
$ cat polls/migrations/0001_initial_migration.py
...
def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.create_table('question',
    sa.Column('pk', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('question_text', sa.String(length=200), nullable=True),
    sa.Column('pub_date', sa.DateTime(), nullable=True),
    sa.PrimaryKeyConstraint('pk')
    )
    op.create_table('choice',
    sa.Column('pk', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('choice_text', sa.String(length=200), nullable=True),
    sa.Column('votes', sa.Integer(), nullable=True),
    sa.Column('question_pk', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['question_pk'], ['question.pk'], ),
    sa.PrimaryKeyConstraint('pk')
    )
    # ### end Alembic commands ###
...

免责声明:我是django-sorcery的维护者之一。感谢您的尝试!如果您遇到任何错误,请随时打开问题。我们正在构建功能时,很多东西还没有得到很好的记录,但是随着时间的推移,希望文档和稳定性会有所改善。