tortoise / aerich

A database migrations tool for TortoiseORM, ready to production.
https://github.com/tortoise/aerich
Apache License 2.0
823 stars 93 forks source link

Delete model migration crashes #132

Closed Olegt0rr closed 3 years ago

Olegt0rr commented 3 years ago

Not working model delete

Reproduce:

  1. Create app with User model
  2. aerich init -t ...
  3. aerich init-db
  4. Add some other models, delete User model
  5. aerich migrate --name user-delete

Exception:

Traceback (most recent call last):
  File "/aerich-example/venv/bin/aerich", line 8, in <module>
    sys.exit(main())
  File "/aerich-example/venv/lib/python3.8/site-packages/aerich/cli.py", line 309, in main
    cli()
  File "/aerich-example/venv/lib/python3.8/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/aerich-example/venv/lib/python3.8/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/aerich-example/venv/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/aerich-example/venv/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/aerich-example/venv/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/aerich-example/venv/lib/python3.8/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/aerich-example/venv/lib/python3.8/site-packages/aerich/cli.py", line 38, in wrapper
    loop.run_until_complete(f(*args, **kwargs))
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "/aerich-example/venv/lib/python3.8/site-packages/aerich/cli.py", line 93, in migrate
    ret = await Migrate.migrate(name)
  File "/aerich-example/venv/lib/python3.8/site-packages/aerich/migrate.py", line 126, in migrate
    cls.diff_models(new_version_content, cls._last_version_content, False)
  File "/aerich-example/venv/lib/python3.8/site-packages/aerich/migrate.py", line 172, in diff_models
    cls._add_operator(cls.add_model(model), upgrade)
  File "/aerich-example/venv/lib/python3.8/site-packages/aerich/migrate.py", line 393, in add_model
    return cls.ddl.create_table(model)
  File "/aerich-example/venv/lib/python3.8/site-packages/aerich/ddl/__init__.py", line 35, in create_table
    return self.schema_generator._get_table_sql(model, True)["table_creation_string"]
  File "/aerich-example/venv/lib/python3.8/site-packages/tortoise/backends/base/schema_generator.py", line 185, in _get_table_sql
    for field_name, column_name in model._meta.fields_db_projection.items():
AttributeError: 'NoneType' object has no attribute '_meta'
long2ice commented 3 years ago

That's real a bug.

long2ice commented 3 years ago

Fixed in https://github.com/tortoise/aerich/commit/505d361597149db06f37a3dcc14c49272957315e